数据结构实验教学手册.docx
- 文档编号:3692375
- 上传时间:2022-11-24
- 格式:DOCX
- 页数:51
- 大小:264.40KB
数据结构实验教学手册.docx
《数据结构实验教学手册.docx》由会员分享,可在线阅读,更多相关《数据结构实验教学手册.docx(51页珍藏版)》请在冰豆网上搜索。
数据结构实验教学手册
《数据结构》
课程实验教学手册
姓名:
王俊东
学号:
1101120216
专业:
计算机科学与技术
班级:
2012级2班
任课教师:
王爽
时间:
2013-2014年度第1学期
综合成绩:
计算机科学与技术学院《数据结构》课程组
实验手册使用及要求
实验操作是教学过程中理论联系实际的重要环节,而实验报告的撰写又是知识系统化的吸收和升华过程,因此,实验报告应该体现完整性、规范性、正确性、有效性。
现将实验报告撰写的有关内容说明如下:
1、实验预习报告必须在实验前完成。
2、实验时带好实验手册方可进行实验。
3、实验时按实验预习报告内容进行实验。
并如实填写实验过程及实验小结。
4、实验结束后填写通过后的源程序。
通过后的源程序可以手写也可以打印粘贴。
实验情况一览表
实验序号
实验名称
实验性质
学时
实验一
顺序表及其应用
验证性实验
2
实验二
单链表及其应用
综合性试验
4
实验三
线性表综合练习
设计性试验
6
实验四
栈和队列及其应用
设计性试验
4
实验五
二叉树及其应用
设计性试验
6
实验六
图及其应用
设计性试验
6
实验七
查找
设计性试验
4
实验八
排序
设计性试验
4
实验一
实验名称顺序表及其应用实验性质验证性实验学时数2学时
一、实验目的
1.深入了解线性表的顺序存储结构。
2.熟练掌握在顺序存储结构上进行插入、删除等操作的算法。
3.通过线性表结构解决现实中的一些问题。
二、实验内容
1.线性表的顺序存储结构。
2.顺序存储结构上进行插入、删除等操作的算法。
3.通过线性表结构解决现实中的一些问题。
三
、
实
验
过
程
1、实验题目
[问题描述]
设计一个顺序表,要求:
(1)包含不少于5个元素,并在屏幕上显示。
(2)对建好的顺序表实现查找、插入、删除等操作,并程序执行结果显示到屏幕上。
(3)设计一个选择菜单。
[基本要求]
(1)按实验内容编写完整的程序,并上机验证。
(2)实验完成后,提交电子档教师验收程序,并提交填写好的实验报告。
[测试数据]
由学生依据软件工程的测试技术自己确定。
注意测试边界数据。
2、源程序
#include"stdio.h"
#include"malloc.h"
#defineMAXSIZE200//线性表允许的最大长度
#definedatatypeint
typedefstruct{//定义线性表的结构
datatypedata[MAXSIZE];//表示线性表(a1,a2,....,an)
intlast;//last表示线性表的实际长度
}SeqList;
voidinit_SeqList(SeqList*L)//线性表初始化
{
L->last=-1;
}
intinsert_SeqList(SeqList*L,inti,datatypex)//插入操作
{
intj;
if((i<1)||(i>L->last+2))
{
printf("插入位置不合法!
");
return0;
}
if(L->last>=MAXSIZE-1)
{
printf("表已满无法插入!
");
return0;
}
for(j=L->last;j>=i-1;j--)
L->data[j+1]=L->data[j];
L->data[i-1]=x;
L->last++;
printf("插入成功\n");
}
intDelete_SeqList(SeqList*L,inti)//删除操作
{
intk;
if((i<1)||(i>L->last+1))
{
printf("删除位置不合法!
");
return0;
}
for(k=i;k<=L->last;k++)
L->data[k-1]=L->data[k];
L->last--;
printf("删除成功!
\n");
}
intLocation_SeqList(SeqList*L,datatypex)//按值查找
{
inti,index;
for(i=0;i
if(L->data[i]==x)
index=i;
return(index+1);
}
voidprint(SeqList*L)//打印线性表
{
inti;
printf("该线性表为:
");
for(i=0;i
printf("%4d",L->data[i]);
printf("\n");
}
intmain()//主函数voidmain()
{
SeqListL;
inti,choice;
init_SeqList(&L);
printf("请输入线性表的长度:
");
scanf("%d",&L.last);
printf("请输入线性表的元素:
");
for(i=0;i scanf("%d",&L.data[i]); do { printf("请选择您想要对线性表的操作: 1: 插入2: 删除3: 查找4: 打印0: 退出\n"); scanf("%d",&choice); switch(choice){ case1: intx,j; printf("请输入要插入的数的位置和数值: "); scanf("%d%d",&j,&x); insert_SeqList(&L,j,x); break; case2: intm; printf("请输入要删除的数的位置: "); scanf("%d",&m); Delete_SeqList(&L,m); break; case3: intn; printf("请输入要查找的数: "); scanf("%d",&n); printf("您要查找的数位于线性表的第%d位.\n",Location_SeqList(&L,n)); break; case4: print(&L); break; case0: break; default: printf("请选择正确的操作! \n"); break; } }while(choice! =0); printf("谢谢使用! \n"); return0; } 四实验小结 初步了解线性表的顺序存储结构,及其定义格式。 掌握在顺序表上进行插入、删除等操作的算法。 但在顺序表的操作上不是十分熟练。 五成绩 实验二 实验名称单链表及其应用实验性质综合性实验学时数4学时 一、实验目的 1.深入了解线性表的链式存储结构。 2.熟练掌握在链式存储结构上进行插入、删除等操作的算法。 3.通过线性表结构解决现实中的一些问题。 二、实验内容 1.线性表的链式存储结构。 2.链式存储结构上进行插入、删除等操作的算法。 3.通过线性表结构解决现实中的一些问题。 三 实 验 过 程 1、实验题目 [问题描述] (1)用头插法或尾插法建立一个单链表,并将结果显示到屏幕上。 (2)对建好的单链表实现查找、插入、删除、修改等操作。 (3)设计一个选择菜单。 [基本要求] (1)按实验内容编写完整的程序,并上机验证。 (2)实验完成后,提交电子档教师验收程序,并提交填写好的实验报告。 [测试数据] 由学生依据软件工程的测试技术自己确定。 注意测试边界数据。 [提高篇](选作) 建立一个有序单链表,实现上述操作。 2、源程序 #include"stdio.h" #include"malloc.h" typedefstructNode {chardata; structNode*next; }Node,*linklist; voidcreatefromtail(linklistL) {Node*r,*s; intflag=1; charc; r=L; printf("请输入线性表的元素以$结束: "); while(flag) {c=getchar(); if(c! ='$') {s=(Node*)malloc(sizeof(Node)); s->data=c; r->next=s; r=s;} else{ flag=0; r->next=NULL;} } } charget(linklistL,inti) {intj; Node*p; if(i<=0)return0; p=L;j=0; while((p->next! =NULL)&&(j {p=p->next; j++;} if(i==j)returnp->data; elsereturn0;} intinslist(linklistL,inti,charx) {Node*pre,*s; intk; if(i<=0) {printf("插入位置不合法! \n"); return0;} pre=L;k=0; while(pre! =NULL&&k {pre=pre->next; k=k+1;} if(! pre) {printf("插入位置不合法! \n"); return0;} else {s=(Node*)malloc(sizeof(Node)); s->data=x; s->next=pre->next; pre->next=s;}} intdeilist(linklistL,inti) {Node*pre,*r; intk; pre=L;k=0; while(pre->next! =NULL&&k {pre=pre->next; k=k+1;} if(! (pre->next)) {printf("删除的节点位置不合法! \n"); return0;} r=pre->next; pre->next=r->next; free(r); return1;} voidalterlist(linklistL,inti,charx) {intj; linklistp; p=L;j=0; if(i<=0) printf("修改位置不合法! \n"); else {while((p->next! =NULL)&&(j {p=p->next; j++;} p->data=x; printf("修改成功! \n");} } voidprint(linklistL) {linklistp; p=L->next; while(p) {printf("%c",p->data); p=p->next;} printf("\n");} intmain() {linklistL; inti,choice,x,j; createfromtail(L); do{ printf("请选择您想要对线性表的操作: 1: 插入2: 删除3: 查找4: 修改5: 打印0: 退出\n"); scanf("%d",&choice); switch(choice){ case1: charc; printf("请输入要插入的字符的位置: "); scanf("%d",&j); printf("请输入要插入的字符: "); c=getchar(); c=getchar(); inslist(L,j,c); printf("插入字符后的线性表为: "); print(L); break; case2: intm; printf("请输入要删除的字符的位置: "); scanf("%d",&m); deilist(L,m); printf("删除字符后的线性表为: "); print(L); break; case3: intn; printf("请输入要查找的字符的位置: "); scanf("%d",&n); printf("您要查找的字符为%c.\n",get(L,n)); break; case4: inta; charx; printf("请输入要修改的字符的位置: "); scanf("%d",&a); printf("请输入要修改的字符: "); x=getchar(); x=getchar(); alterlist(L,a,x); printf("修改字符后的线性表为: "); print(L); break; case5: print(L); case0: break; default: printf("请选择正确的操作! \n"); break;} }while(choice! =0); printf("谢谢使用! \n"); return0; } 四 实 验 小 结 初步了解线性表的链式存储结构,及其定义格式。 掌握了在链表上进行插入、删除等操作的算法。 对链表的了解不是很深入,在其使用上往往会犯一些错误比如在链表中进行插入插不到指定位置,删除时位置错误等。 五 成 绩 实验三 实验名称线性表综合练习实验性质设计性实验学时数6学时 一、实验目的 1.根据实际问题,应用线性表的顺序存储结构。 2.根据实际问题,深入理解线性表的链式存储结构。 3.通过线性表结构解决现实中的一些问题。 二、实验内容 1.线性表的两种存储结构。 2.不同存储结构上进行插入、删除等操作的算法。 3.通过线性表结构解决现实中的一些问题。 三 、 实 验 过 程 1、实验题目 [问题描述] 设计一个学生信息系统,要求: (1)每条信息包含学号,姓名,性别,院系,宿舍等项。 (2)能够对数据信息进行查找,插入,删除等。 (3)选择合适的存储结构,在主程序上运行,验证其正确性,并写出程序执行结果。 [基本要求] (1)按实验内容编写完整的程序,并上机验证。 (2)实验完成后,提交电子档教师验收程序,并提交填写好的实验报告。 [测试数据] 由学生依据软件工程的测试技术自己确定。 注意测试边界数据。 2、源程序 #include"stdio.h" #include"string.h" #include"stdlib.h" #include"malloc.h" typedefstructNode { charnumber[10]; charname[10]; charsex[4]; chardepartment[16]; chardorm[6]; structNode*next; }Node,*linklist; voidcreatefromtail(linklistL) { inti,n; printf("请输入学生数: "); scanf("%d",&n); charnumber[10],name[10],sex[4],department[16],dorm[6]; Node*r,*s; r=L; printf("请输入学生的信息! \n"); for(i=0;i { printf("请输入学生学号: "); scanf("%s",number); printf("请输入学生姓名: "); scanf("%s",name); printf("请输入学生性别: "); scanf("%s",sex); printf("请输入学生院系: "); scanf("%s",department); printf("请输入学生宿舍号: "); scanf("%s",dorm); s=(Node*)malloc(sizeof(Node)); strcpy(s->number,number); strcpy(s->name,name); strcpy(s->sex,sex); strcpy(s->department,department); strcpy(s->dorm,dorm); r->next=s; r=s; } r->next=NULL; } intinslist(linklistL) { charnumber[10],name[10],sex[4],department[16],dorm[6]; Node*pre,*s; intk,i; printf("请输入插入位置"); scanf("%d",&i); if(i<=0) { printf("插入位置不合法! \n"); return0; } pre=L;k=0; while(pre! =NULL&&k { pre=pre->next; k=k+1; } if(! pre) { printf("插入位置不合法! \n"); return0; } else { printf("请输入学生学号: "); scanf("%s",number); printf("请输入学生姓名: "); scanf("%s",name); printf("请输入学生性别: "); scanf("%s",sex); printf("请输入学生院系: "); scanf("%s",department); printf("请输入学生宿舍号: "); scanf("%s",dorm); s=(Node*)malloc(sizeof(Node)); strcpy(s->number,number); strcpy(s->name,name); strcpy(s->sex,sex); strcpy(s->department,department); strcpy(s->dorm,dorm); s->next=pre->next; pre->next=s; } } intget(linklistL,inti) { charnumber[10],name[10],sex[4],department[16],dorm[6]; intj; Node*p; if(i<=0)return0; p=L;j=0; while((p->next! =NULL)&&(j { p=p->next; j++; } if(i==j) { printf("该学生的信息为: \n"); printf("学号: %s",p->number); printf("姓名: %s",p->name); printf("性别: %s",p->sex); printf("学院: %s",p->department); printf("宿舍号: %s",p->dorm); printf("\n"); } elsereturn0; } intdeilist(linklistL) { Node*pre,*r; intk,i; printf("请输入要删除的字符的位置: "); scanf("%d",&i); pre=L;k=0; while(pre->next! =NULL&&k { pre=pre->next; k=k+1; } if(! (pre->next)) { printf("删除的节点位置不合法! \n"); return0; } r=pre->next; pre->next=r->next; free(r); return1; } voidprint(linklistL) { linklistp; p=L->next; while(p) { printf("学号: %s",p->number); printf("姓名: %s",p->name); printf("性别: %s",p->sex); printf("学院: %s",p->department); printf("宿舍号: %s",p->dorm); printf("\n"); p=p->next; } } intmain() { linklistL; inti,choice,x,j; createfromtail(L); do { printf("请选择您想要对线性表的操作: 1: 插入2: 删除3: 查找4: 打印0: 退出\n"); scanf("%d",&choice); switch(choice){ case1: inslist(L); print(L); break; case2: deilist(L); print(L); break; case3: intn; printf("请输入要查找的学生的位置: "); scanf("%d",&n); get(L,n); break; case4: print(L); break; case0: break; default: printf("请选择正确的操作! \n"); break; } }while(choice! =0); printf("谢谢使用! \n"); return0; } 四 实 验 小 结 对链式表有了进一步的了解,能够利用链式表解决一些实际问题。 了解了链式表的优势,他不会造成空间的浪费,对于插入和删除操作上链式表比顺序表有 明显的优势。 五 成 绩 实验四 实验名称栈和队列及其应用实验性质设计性实验学时数4学时 一、实验目的 1.掌握栈与队列的抽象数据类型描述及特点。 2.掌握栈和队列的顺序和链式存储结构与基本算法实现。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 实验教学 手册
![提示](https://static.bdocx.com/images/bang_tan.gif)