计算机软件技术基础实验报告.docx
- 文档编号:18049674
- 上传时间:2023-04-24
- 格式:DOCX
- 页数:14
- 大小:18.67KB
计算机软件技术基础实验报告.docx
《计算机软件技术基础实验报告.docx》由会员分享,可在线阅读,更多相关《计算机软件技术基础实验报告.docx(14页珍藏版)》请在冰豆网上搜索。
计算机软件技术基础实验报告
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((j
=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((j
=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->d 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((j =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((j =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 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();}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机软件 技术 基础 实验 报告