计算机软件实验报告.docx
- 文档编号:698497
- 上传时间:2022-10-12
- 格式:DOCX
- 页数:25
- 大小:795.46KB
计算机软件实验报告.docx
《计算机软件实验报告.docx》由会员分享,可在线阅读,更多相关《计算机软件实验报告.docx(25页珍藏版)》请在冰豆网上搜索。
计算机软件实验报告
(此文档为word格式,下载后您可任意编辑修改!
)
CENTRALSOUTHUNIVERSITY
实验一线性表的基本操作
一、实验目的与基本要求
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.在线性表的顺序存储结构的第一个位置上插入一个元素。
(注意区分链表和顺序表)
五、实验提示
编写一个可运行的程序,建立链表与顺序表,并由用户输入递增有序排列的链表A、链表B、顺序表的内容。
最好有一定的容错功能和友好的界面。
实现实验内容的各项操作并输出操作后的表的内容。
选做:
链表的排序,以实现输入非有序表也可进行内容2的要求。
六、报告要求
1、实验目的
2、实验内容
3、代码
4、调试过程中遇到的问题与解决方法
以打印稿形式于考试时上交。
七、参考代码
*ElemType替换为需要的变量名*
#include } **********求线性表中第i个元素运算********** SLink*GetElem(SLink*sq,inti) { intj=1; SLink*p=sq->next; if(iGetLength(sq)) returnNULL; while(j { p=p->next; j++; } returnp; } **********按值查找运算********** SLink*Locate(SLink*sq,ElemTypex,inti) { SLink*p=sq->next; if(i<1||i>GetLength(sq)) returnNULL; while(p! =NULL&&p->data! =x) p=p->next; returnp; } **********插入结点运算********** intInsElem(SLink*sq,ElemTypex,inti) { intj=1; SLink*p=sq,*s; s=(SLink*)malloc(sizeof(SLink)); s->data=x; s->next=NULL; if(i<1||i>GetLength(sq)+1) return0; while(j { p=p->next; j++; } s->next=p->next; p->next=s; return1; } **********删除结点运算********** intDelElem(SLink*sq,inti) { intj=1; SLink*p=sq,*q; if(i<1||i>GetLength(sq)) return0; while(j { p=p->next; j++; } q=p->next; p->next=q->next; free(q); return1; } **********输出元素值运算********** voidDispList(SLink*sq) { SLink*p=sq->next; while(p! =NULL) { printf("%d\n",p->data); p=p->next; } return; } *() { intn,i,j,k; SLink*L; *在主函数中添加内容调用自定义函数,并添加适当的函数以完成功能。 * } 实验2栈和队列的基本操作 一、实验目的与基本要求 1.掌握栈和队列的顺序存储和链式存储结构 1.掌握栈和队列的特点。 2.掌握栈和队列的基本运算。 二、实验条件 5.硬件: 一台微型计算机 6.软件: 操作系统和C语言系统。 三、实验方法 确定存储结构后,上机调试实现栈和队列的基本运算。 四、实验内容 1.写出栈的入栈和出栈的算法 2.写出队列的入队和出队算法。 五、实验提示 编写一个可运行的程序,建立栈与队列,实现入栈、出栈,入队、出队的算法,并由用户选择操作,输出栈与队列的内容。 六、报告要求 1、实验目的 2、实验内容 3、代码 4、调试过程中遇到的问题与解决方法 以打印稿形式于考试时上交。 七、参考代码 **********建栈********** int*init_stack(s,m,top) int*s;intm,*top; { if(s! =NULL) free(s); s=malloc(m*sizeof(int)); *top=0; flag1=1; returns; } **********入栈********** voidpush(s,m,top,x) ints[],x;intm,*top; { if(flag1==0) { printf("尚未建栈\n"); return; } if(*top==m) { printf("栈满\n"); return; } *top=*top+1; s[*top-1]=x; return; } **********退栈********** voidpop(s,m,top,y) ints[],*y;intm,*top; { if(flag1==0) { printf("尚未建栈\n"); return; } if(*top==0) { printf("**********栈空\n**********\n"); return; } *y=s[*top-1]; *top=*top-1; return; } **********读栈顶********** voidtop(s,m,top,y) ints[],*y;intm,*top; { if(flag1==0) { printf("尚未建栈\n"); return; } if(*top==0) { printf("空栈\n"); return; } *y=s[*top-1]; return; } **********建队********** int*init_queue(q,m,front,rear,s) int*q;intm,*front,*rear,*s; { if(q! =NULL) free(q); q=malloc(m*sizeof(int)); *front=m; *rear=m; *s=0; flag2=1; returnq; } **********入队********** voidaddcq(q,m,rear,front,s,x) intq[],x;intm,*rear,*front,*s; { if((*s==1)&&(*rear==*front)) { printf("队满\n"); return; } *rear=*rear+1; if(*rear==m+1) *rear=1; q[*rear-1]=x; *s=1; return; } **********退队********** voiddelcq(q,m,rear,front,s,y) intq[],*y;intm,*rear,*front,*s; { if(flag2==0) { printf("尚未建队\n"); return; } if(*s==0) { printf("队空\n"); return; } *front=*front+1; if(*front==m+1) *front=1; *y=q[*front-1]; if(*front==*rear) *s=0; return; } 运行结果: 实验3二叉树的构造 一、实验目的与基本要求 1.熟练掌握二叉树的构造方法。 二、实验条件 3.硬件: 一台微机 4.软件: 操作系统和C语言系统 三、实验方法 确定存储结构后,上机调试二叉树的构造方法。 四、实验内容 设计一个读入一串整数构成一棵二叉树的程序。 (深度至少为2) 五、实验提示 编写一个可运行的程序,建立二叉树,由用户输入二叉树的数据。 选做: 输出前、中、后序遍历。 六、报告要求 1、实验目的 2、实验内容 3、代码 4、调试过程中遇到的问题与解决方法 以打印稿形式于考试时上交。 七、参考代码 #include } pretrav(bt) structbtnode*bt; { if(bt! =NULL) { printf("%d\n",bt->d); pretrav(bt->lchild); pretrav(bt->rchild); } return; } intrav(bt) structbtnode*bt; { if(bt! =NULL) { intrav(bt->lchild); printf("%d\n",bt->d); intrav(bt->rchild); } return; } postrav(bt) structbtnode*bt; { if(bt! =NULL) { postrav(bt->lchild); postrav(bt->rchild); printf("%d\n",bt->d); } return; } intmain() { structbtnode*t; ints; while (1) { printf("请选择\n1、建立二叉树\n2、前序遍历\n3、中序遍历\n4、后序遍历\n5、退出\n"); scanf("%d",&s); switch(s) { case1: t=creatbt(t,0);break; case2: pretrav(t);break; case3: intrav(t);break; case4: postrav(t);break; default
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机软件 实验 报告