计算机软件技术基础实验报告.docx

上传人:b****1 文档编号:1436860 上传时间:2023-05-01 格式:DOCX 页数:14 大小:18.67KB
下载 相关 举报
计算机软件技术基础实验报告.docx_第1页
第1页 / 共14页
计算机软件技术基础实验报告.docx_第2页
第2页 / 共14页
计算机软件技术基础实验报告.docx_第3页
第3页 / 共14页
计算机软件技术基础实验报告.docx_第4页
第4页 / 共14页
计算机软件技术基础实验报告.docx_第5页
第5页 / 共14页
计算机软件技术基础实验报告.docx_第6页
第6页 / 共14页
计算机软件技术基础实验报告.docx_第7页
第7页 / 共14页
计算机软件技术基础实验报告.docx_第8页
第8页 / 共14页
计算机软件技术基础实验报告.docx_第9页
第9页 / 共14页
计算机软件技术基础实验报告.docx_第10页
第10页 / 共14页
计算机软件技术基础实验报告.docx_第11页
第11页 / 共14页
计算机软件技术基础实验报告.docx_第12页
第12页 / 共14页
计算机软件技术基础实验报告.docx_第13页
第13页 / 共14页
计算机软件技术基础实验报告.docx_第14页
第14页 / 共14页
亲,该文档总共14页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

计算机软件技术基础实验报告.docx

《计算机软件技术基础实验报告.docx》由会员分享,可在线阅读,更多相关《计算机软件技术基础实验报告.docx(14页珍藏版)》请在冰点文库上搜索。

计算机软件技术基础实验报告.docx

计算机软件技术基础实验报告

1

实验一线性表的基本操作

一、实验目的与基本要求

1.掌握数据结构中的一些基本概念。

数据、数据项、数据元素、数据类型和数据结构,以及它们之间的关系。

2.了解数据的逻辑结构和数据的存储结构之间的区别与联系;数据的运算与数据的逻辑结构的关系。

3.掌握线性表的基本操作:

插入、删除、查找以及线性表的合并等运算。

4.掌握运用C语言上机调试线性表的基本方法。

二、实验条件

1.硬件:

一台微机

2.软件:

操作系统和C语言系统

三、实验方法

确定存储结构后,上机调试实现线性表的基本运算。

四、实验内容

1.试编写在无头结点的单链表上实现线性表基本运算LOCATE(L,X),INSERT(L,X,1)和DELETE(L,1)的算法。

2.假设有两个按数据元素值递增有序排列的线性表A和B,均以单链表作为存储结构。

编写算法将A表和B表归并成一个按元素值递减有序(即非递增有序,允许值相同)排列的线性表C,并要求利用原表(即A表和B表)结点空间存放表C。

3.将一个线性表中的值就地逆置。

4.在线性表的顺序存储结构的第一个位置上插入一个元素。

(注意区分链表和顺序表)

实验代码:

#includestdlib.h#includestdio.h

structnode//定义结构体

{

2

intd;

structnode*next;};

structnode*head1,*head2,*p,*q;

voidpre(structnode*head)//打印数据

{printf(链表中的数据为:

\n);p=head;while(p!

=NULL){

printf(],p->d);q=p;p=p->next;

}

printf(\n);}

structnode*creat()//建立链表

{structnode*head;intx;

printf(输入你要储存的数据:

\n);head=NULL;q=NULL;scanf(%d,&x);while(x>0){

p=(structnode*)malloc(sizeof(structnode));p->d=x;p->next=NULL;

if(head==NULL)head=p;elseq->next=p;q=p;

scanf(%d,&x);getchar();}

pre(head);return(head);}

voidlocate(structnode*head,intx)//查找链表中的数据

{intu=1;p=head;

3

while(p->next!

=NULL){if(p->d==x)break;else{p=p->next;u++;}}

if(p->d!

=x)printf(无此结点);

printf(在链表中的位置为:

);printf(%d,u);}

voidinsert(structnode*head,intx,inti)//插入数据

{p=head;intj=1;

q=(structnode*)malloc(sizeof(structnode));q->d=x;if(i==1)

{q->next=head;head=q;}else{

while((jnext!

=NULL)){j++;p=p->next;}q->next=p->next;p->next=q;}}

voiddelet(structnode*head,inti)//删除数据

{p=head;intj=1;

if(i<0)printf(无此位置);

if(i==1)

{q=head;head=head->next;free(q);}else{

while((jnext!

=NULL)){p=p->next;j++;}q=p->next;

p->next=q->next;free(q);}

}

4

voidhebing(structnode*x,structnode*y)//合并两个链表

{p=x;q=y;

while(p->next!

=NULL)p=p->next;p->next=q;pre(x);}

voidpaixu(structnode*head)//对链表中的数据进行排序

{intm,n,i=1,t;p=head;

while(p->next!

=NULL){p=p->next;i++;}p=head;

for(n=i;n>1;n--){p=head;

for(m=1;m

q=p->next;if(p->dd){t=p->d;p->d=q->d;q->d=t;}

p=p->next;}}}

voidcaozuo(structnode*head)//操作界面

{intm,n;chart;

printf(输入你要的操作:

,查找2,插入3,删除\n);scanf(%c,&t);switch(t){case'1':

{printf(输入你要查找的元素的值:

\n);scanf(%d,&m);locate(head,m);}break;

case'2':

{printf(输入你要插入的元素的值和位置:

\n);

5

scanf(%d,&m);scanf(%d,&n);

insert(head,m,n);pre(head);}break;case'3':

{printf(输入你要删除的元素的位置:

\n);scanf(%d,&m);delet(head,m);pre(head);}break;

default:

printf(error\n);

}}

voidmain()//主函数

{charfrag='y',n=NULL;

printf(输入你要建立的第A链表中的元素:

\n);head1=creat();

printf(输入你要建立的第B链表中的元素:

\n);head2=creat();do

{printf(选择你要操作的链表A/B或者合并排序操作C:

\n);//选择操作

scanf(%c,&n);getchar();

switch(n){case'A':

{caozuo(head1);}break;case'B':

{caozuo(head2);}break;

case'C':

{hebing(head1,head2);paixu(head1);pre(head1);}break;default:

printf(error\n);

}

printf(\n是否继续y/n:

\n);scanf(%c,&frag);getchar();}while(frag=='y');

}

6

实验2栈和队列的基本操作

一、实验目的与基本要求

1.掌握栈和队列的顺序存储和链式存储结构

2.掌握栈和队列的特点。

3.掌握栈和队列的基本运算。

二、实验条件

1.硬件:

一台微型计算机

2.软件:

操作系统和C语言系统。

三、实验方法

确定存储结构后,上机调试实现栈和队列的基本运算。

四、实验内容

1.写出栈的入栈和出栈的算法

2.写出队列的入队和出队算法。

实验代码:

#includestdlib.h#includestdio.h

structnode{intd;

structnode*next;};

intnum;structnode*head;

voidpre(){structnode*p;

printf(链表中的数据为:

\n);

p=head;while(p!

=NULL){

printf(],p->d);p=p->next;

7

}

printf(\n);}

voidcreat(){structnode*p,*q;intx;

printf(输入你要储存的数据,输入负数作为结束:

\n);head=NULL;q=NULL;scanf(%d,&x);while(x>0){num++;

p=(structnode*)malloc(sizeof(structnode));p->d=x;p->next=NULL;

if(head==NULL)head=p;elseq->next=p;q=p;

scanf(%d,&x);getchar();}pre();

}

voidinsert(intx,inti){structnode*p,*q;p=head;intj=1;

q=(structnode*)malloc(sizeof(structnode));q->d=x;if(i==1)

{q->next=head;head=q;}else{

while((jnext!

=NULL)){j++;p=p->next;}q->next=p->next;

8

p->next=q;}}

voiddelet(inti){structnode*p,*q;p=head;intj=1;

if(i<0)printf(无此位置);

if(i==1)

{q=head;head=head->next;free(q);}else{

while((jnext!

=NULL)){p=p->next;j++;}q=p->next;

p->next=q->next;free(q);}

}

voidpush(){intn;num++;

printf(请输入数据:

);scanf(%d,&n);getchar();insert(n,num);pre();

}

voidpop(){delet(num);num--;pre();}

voidrudui(){intn;

num++;

9

printf(请输入数据:

);scanf(%d,&n);getchar();insert(n,1);pre();}

voidchudui(){delet(num);num--;pre();

}

voidmain(){charfrag='y';intn;creat();do

{printf(选择你要的操作入栈出栈入队出队:

\n);scanf(%d,&n);getchar();switch(n){case1:

{printf(入栈操作);push();printf(\n);}break;case2:

{

printf(出栈操作);pop();printf(\n);}break;case3:

{printf(入队操作);

rudui();printf(\n);}break;case4:

{printf(出队操作);

chudui();printf(\n);}break;default:

printf(error\n);

}

printf(\n是否继续y/n:

\n);scanf(%c,&frag);getchar();}while(frag=='y');

10

}

实验3二叉树的构造

一、实验目的与基本要求

熟练掌握二叉树的构造方法。

二、实验条件

1.硬件:

微机

2.软件:

操作系统和C语言系统

三、实验方法

确定存储结构后,上机调试二叉树的构造方法。

四、实验内容

设计一个读入一串整数构成一棵二叉树的程序。

(深度至少为2)

实验代码:

#include#include

structbtnode//二叉树结构体

{chard;

structbtnode*lchild;structbtnode*rchild;

};

structbtnode*creatbt(structbtnode*bt,intk)//建立二叉树

{structbtnode*p,*t;

t=(structbtnode*)malloc(sizeof(structbtnode));printf(输入元素(输入时结束所在分枝):

);charb;scanf(%c,&b);getchar();if(b!

='0'){p=(structbtnode*)malloc(sizeof(structbtnode));p->d=b;p->lchild=NULL;p->rchild=NULL;

11

if(k==0)t=p;

if(k==1)bt->lchild=p;if(k==2)bt->rchild=p;creatbt(p,1);creatbt(p,2);

}

returnt;

}

voidpretrav(structbtnode*bt)//前序遍历

{if(bt!

=NULL){printf(%c\n,bt->d);pretrav(bt->lchild);pretrav(bt->rchild);

}return;

}

voidintrav(structbtnode*bt)//中序遍历

{if(bt!

=NULL){intrav(bt->lchild);printf(%c\n,bt->d);intrav(bt->rchild);}return;

}

voidpostrav(structbtnode*bt)//后序遍历

{if(bt!

=NULL){postrav(bt->lchild);postrav(bt->rchild);printf(%c\n,bt->d);}return;

}

intmain(){structbtnode*m;charfrag='y';

12

ints;do{printf(请选择\n1、建立二叉树\n2、前序遍历\n3、中序遍历\n4、后序遍历\n5、退出\n);scanf(%d,&s);getchar();switch(s){case1:

m=creatbt(0,0);break;case2:

pretrav(m);break;case3:

intrav(m);break;case4:

postrav(m);break;default:

{printf(是否继续\ny/n);scanf(%c,&frag);getchar();

};break;

}

}while(frag=='y');

}

13

实验4排序的基本操作

一、实验目的与基本要求

1.掌握常用的排序方法,并用高级语言实现排序算法。

2.理解排序的定义和各种排序的特点。

3.了解排序过程以及依据的原则,并了解各种排序方法的时间复杂度分析。

二、实验条件

1.硬件:

一台微机

2.软件:

操作系统和C语言系统

三、实验方法

确定存储结构后,上机调试不同的排序方法。

四、实验内容

1.设计一待排序的线性表以顺序存储结构存储,试写出冒泡排序算法。

2.给出n个学生的考试成绩表,每条信息由姓名与分数组成,试设计一个算法:

(1)按分数高低次序,打印出每个学生在考试中获得的名次,分数相同的为同一名次。

(2)按名次列出每个学生的姓名与分数。

实验代码:

#includestdlib.h#includestdio.h

structnode//结构体变量

{intf;intm;charn;

structnode*next;};

voidpre(structnode*head)//打印数据

14

{structnode*p;printf(链表中的数据为:

\n);printf(名次姓名分数\n);

p=head;while(p!

=NULL){

printf(],p->m);printf(\,p->n);printf(],p->f);printf(\n);p=p->next;

}

printf(\n);}

intnum;

structnode*creat()//建立数据

{structnode*head,*q,*p;intx,y,j;charz;

printf(输入录入学生的人数:

\n);head=NULL;q=NULL;

scanf(%d,&num);getchar();for(j=0;j

\n);scanf(%c,&z);getchar();

printf(输入学生的分数:

\n);scanf(%d,&x);

getchar();

p=(structnode*)malloc(sizeof(structnode));p->n=z;p->f=x;p->m=0;p->next=NULL;

if(head==NULL)head=p;elseq->next=p;q=p;

15

}

pre(head);return(head);}

structnode*paixu(structnode*head)//按分数排序

{

inti,j;structnode*q,*p,*k,*t;

t=(structnode*)malloc(sizeof(structnode));t->next=head;for(i=num-1;i>0;i--){q=t;

for(j=0;j

p=q->next;k=p->next;

if(k->f>p->f){p->next=k->next;q->next=k;k->next=p;

}

q=q->next;

}

}

q=t->next;j=0;q->m=1;

for(i=1;i

{p=q->next;

if(q->f==p->f){p->m=q->m;}

16

elsep->m=q->m+1;q=q->next;}return(t->next);

}

voidmain(){

structnode*head,*m;head=creat();m=paixu(head);

printf(按名次排序后);pre(m);getchar();}

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 人文社科 > 法律资料

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2