九江学院 数据结构 实验报告 完整答案.docx
- 文档编号:10817432
- 上传时间:2023-05-27
- 格式:DOCX
- 页数:75
- 大小:167.25KB
九江学院 数据结构 实验报告 完整答案.docx
《九江学院 数据结构 实验报告 完整答案.docx》由会员分享,可在线阅读,更多相关《九江学院 数据结构 实验报告 完整答案.docx(75页珍藏版)》请在冰点文库上搜索。
九江学院数据结构实验报告完整答案
(此文档为word格式,下载后您可任意编辑修改!
)
《数据结构》
实验报告
班级学号:
姓名:
《数据结构》
实验报告
学院:
信息科学与技术学院
专业:
学期:
班级:
学号:
姓名:
易网返利网——淘宝购物返现
逐新时尚-品牌服装-提供:
实验1函数、指针、结构体复习1
1.1实验目的1
1.2实验准备1
1.3实验任务1
实验2线性表5
2.1实验目的5
2.2实验准备5
2.3实验任务5
实验3栈和队列19
3.1实验目的19
3.2实验准备19
3.3实验任务19
实验4线性表的综合应用27
4.1实验目的27
4.2实验准备27
4.3实验任务27
实验5树和二叉树29
5.1实验目的29
5.2实验准备29
5.3实验任务29
实验6图39
6.1实验目的39
6.2实验准备39
6.3实验任务39
实验7查找43
7.1实验目的43
7.2实验准备43
7.3实验任务43
实验8排序53
8.1实验目的53
8.2实验准备53
8.3实验任务53
实验9综合实验59
9.1实验目的59
9.2实验预习59
9.3实验任务59
实验1函数、指针、结构体复习
院(系):
信息科学与技术学院课程名称:
数据结构教师签名:
班级
B1131
学号
实验室
专业
姓名
计算机号
实验名称
所用软件
实验成绩
1.1实验目的
1.掌握C语言的语法并由算法形成相应的程序。
2.熟练掌握C语言函数调用的相关知识点。
3.熟练掌握C语言的指针和结构体相关知识点。
4.理解数据结构的基本概念。
1.2实验准备
1.复习C语言的函数调用、指针、结构体的相关知识点。
2.算法的概念和算法分析等知识。
3.C语言程序设计有关函数及数组等的知识及编程环境的使用方法。
4.复习课堂讲解的理论内容。
1.3实验任务
1.在提示**********blank**********下面填写合适的内容完成程序设计。
编写一个程序,判断一个字符串是否为“回文”(顺序和倒读都一样的字符串称为“回文”),并分析算法的时间复杂度。
提示:
实现本程序需要设计两个函数。
①主函数main,数据的输入和输出在该函数中完成。
②自定义函数func,判断串s是否为回文。
采用的方法是:
用flag表示是否为回文。
用i从左向右扫描字符串s,用j从右向左扫描字符串s,若s[i]与s[j]不相等,则flag=0(表示不是回文)并退出循环,否则,继续比较直到i *判断指定字符串是否回文* #include for(i=0,j=t-1;i<=t2;i++,j--) { if(str[i]==str[j])continue; else {flag=0;break;} } if(i>=t2)flag=1; returnflag; } voidmain() { ********************blank******************** char*s;intflag;*填空位置1,变量定义* scanf("%s",s);*填空位置2,从键盘输入需要判定的字符串* flag=func(s);*填空位置3,调用func函数* if(flag==0)printf("NO\n"); elseprintf("YES\n");*填空位置4,根据返回值flag的值,输出判定结果* } 该算法的时间复杂度是: _______O_____________。 2.定义函数intf(char*x,chary)判断x所指的字符串是否包含字符y,若是则函数返回1,否则返回0。 写出完整的源程序代码。 #include } voidmain() { char*str,ch; intt; gets(str); scanf("%c",&ch); t=f(str,ch); printf("t=%d\n",t); } 3.用结构体类型编写一个程序,输入一个学生的学号、姓名及3门课的成绩,计算并输出其平均成绩。 写出完整的源程序代码。 #include { inti,j; floatsum=0.0,aver; printf("Pleaseinputtheid: "); scanf("%d",&s.id); printf("Pleaseinputthename: "); scanf("%s",s.name); printf("Pleaseinputthethreescore: "); for(i=0;i<3;i++) { scanf("%f",&s.score[i]); sum=sum+s.score[i]; } aver=sum3; printf("averageis: %f\n",aver); } 易网返利网——淘宝购物返现 逐新时尚-品牌服装-提供: 实验2线性表 院(系): 信息科学与技术学院课程名称: 数据结构教师签名: 班级 学号 实验室 专业 姓名 计算机号 实验名称 所用软件 实验成绩 2.1实验目的 1.掌握顺序表的基本特点。 2.熟练掌握顺序表的建立、查找、插入和删除等操作。 3.掌握单链表的基本特点。 4.熟练掌握单链表的建立、插入、删除等基本操作。 5.理解循环链表、双向链表的含义及其特点。 6.了解循环链表、双向链表的基本操作。 2.2实验准备 1.线性表顺序存储结构的表示。 2.顺序表的基本操作: 顺序表的建立、查找、插入、删除。 3.线性表链式存储结构的表示。 4.链表的基本操作: 链表的建立、查找、插入、删除。 2.3实验任务 1.实现顺序表的各种基本操作。 (1)源程序代码。 #include }seqlist; voidcreate(seqlist*L)*建立一个顺序存储的线性表* { inti; printf("Pleaseinputthelenoftheseqlist: ");*从键盘输入当前顺序表的实际长度* scanf("%d",&(*L).len); printf("Pleaseinputtheeveryelementoftheseqlist: "); for(i=0;i<(*L).len;i++)*从键盘输入顺序表的每个元素* scanf("%d",&(*L).list[i]); printf("Outputtheeveryelementoftheseqlist: \n"); for(i=0;i<(*L).len;i++)*顺序表建立成功后,输出整个顺序表* printf("%5d",(*L).list[i]);*运行结果 (1)* printf("\n"); } voidaccess(seqlist*L,inti)*根据指定位置访问线性表* { if((i<0)||(i>(*L).len-1))*判断给定位置是否为合法取值* printf("Theplaceisnotcorrect! \n"); else printf("%d\n",(*L).list[i]);*运行结果 (2)* } voidbefore_after(seqlist*L,inti)*根据指定位置寻找其前趋元素和后继元素* { if((i<0)||(i>(*L).len-1)) printf("Theplaceisnotcorrect! \n"); elseif(i==0) printf("%d\n",(*L).list[i+1]); elseif(i==(*L).len-1) printf("%d\n",(*L).list[i-1]); elseif((i>0)&&(i<(*L).len-1)) printf("%d,%d\n",(*L).list[i-1],(*L).list[i+1]);*运行结果(3)* } voidsearch(seqlist*L,intkey)*根据给定元素key查找顺序表* { intm; for(m=0;m<(*L).len;m++) { if((*L).list[m]! =key) continue; else { printf("Seachingisseccessful! \n"); printf("Theplaceofthesearchkeyis: %d\n",m); break; } } if(m>=(*L).len) printf("Theseqlist");*运行结果(4)* } voiddelete(seqlist*L,inti)*删除顺序表的元素* { intm; printf("Outputtheeveryelementoftheseqlistbeforedeleting: \n");*删除前输出顺序表中的所有元素* for(m=0;m<(*L).len;m++) printf("%5d",(*L).list[m]);*运行结果(5)* printf("\n"); for(m=i;m<(*L).len;m++)*删除位置之后的所有元素依次左移一位* (*L).list[m]=(*L).list[m+1]; (*L).len--; printf("Outputtheeveryelementoftheseqlistafterdeleting: \n");*删除后输出顺序表中的所有元素* for(m=0;m<(*L).len;m++) printf("%5d",(*L).list[m]);*运行结果(6)* printf("\n"); } voidinsert(seqlist*L,inti,inte)*在顺序表指定位置i后插入元素e* { intm; printf("Outputtheeveryelementoftheseqlistbeforeinserting: \n");*插入前输出顺序表中的所有元素* for(m=0;m<(*L).len;m++) printf("%5d",(*L).list[m]);*运行结果(7)* printf("\n"); (*L).len++; for(m=(*L).len-1;m>=i;m--)*插入位置之后的元素依次右移一位* (*L).list[m+1]=(*L).list[m]; (*L).list[i]=e;*在指定位置i上插入元素e* printf("Outputtheeveryelementoftheseqlistafterinserting: \n");*插入后输出顺序表中的所有元素* for(m=0;m<(*L).len;m++) printf("%5d",(*L).list[m]);*运行结果(8)* printf("\n"); } voidmain() { staticseqlist*L; inti,e; printf("\nfunction: create\n"); create(L);*调用函数create建立一个顺序表* printf("\nfunction: access\n"); printf("Pleaseinputtheposition: "); scanf("%d",&i);*从键盘输入访问位置i* access(L,i);*调用函数access根据指定位置访问顺序表* printf("\nfunction: before_after\n"); printf("Pleaseinputtheposition: "); scanf("%d",&i);*从键盘输入指定位置i* before_after(L,i);*调用函数before_after根据位置i确定前趋元素和后继元素* printf("\nfunction: search\n"); printf("Pleaseinputthesearchkey: "); scanf("%d",&e);*从键盘输入查找元素e* search(L,e);*调用函数search根据关键字e查找顺序表* printf("\nfunction: delete\n"); printf("Pleaseinputthedeleteposition: "); scanf("%d",&i);*从键盘输入删除位置i* delete(L,i);*调用函数delete删除指定位置i的元素* printf("\nfunction: insert\n"); printf("Pleaseinputtheinsertposition: "); scanf("%d",&i);*从键盘输入插入位置i* printf("Pleaseinputtheinsertelement: "); scanf("%d",&e);*从键盘输入插入元素e* insert(L,i,e);*调用函数insert在插入位置i上插入元素e* } (2)上机调试上面的源程序,并根据下列原始数据记录程序的运行结果。 原始数据 顺序表的实际长度 10 顺序表的元素 1,2,3,4,5,6,7,8,9,10 访问顺序表的位置i 5 寻找前趋、后继元素的指定位置i 7 查找关键字e 58 删除位置i 5 插入位置i 7 插入元素e 28 (3)运行结果记录。 ①Outputtheeveryelementoftheseqlist: 12345678910 ②6 ③7,9 Theseqlist;*定义线性表的实际长度* }seqlist; voidcreate(seqlist*L)*根据已知条件建立一个有序的顺序表* { inti; printf("\n\nPleaseinputthelengthoftheorderedseqlist: "); **********blank********** scanf("%d",&(*L).len);*从键盘输入有序表的实际长度,已知(*L).len=10* printf("\n\nPleaseinputtheeveryelementoftheorderedseqlist: "); for(i=0;i<(*L).len;i++) **********blank********** scanf("%d",&(*L).list[i]); *从键盘输入有序表中的每个元素,{9}* } voidinsert(seqlist*L,inte)*在顺序表指定位置i后插入元素e* { inti,j,m,n; printf("\n\nOutputtheeveryelementoftheseqlistbeforeinserting: \n");*插入前输出顺序表中的所有元素* for(n=0;n<(*L).len;n++) printf("%5d",(*L).list[n]); printf("\n"); (*L).len++; for(i=(*L).len-2;i>=0;i--) **********blank********** If(e<(*L).list[i])*确定插入位置* { **********blank********** (*L).list[i+1]=(*L).list[i];*插入位置之后的元素依次右移一位* j=i; } **********blank********** (*L).list[j]=e;*在确定的插入位置j上插入元素e* printf("\n\nOutputtheeveryelementoftheseqlistafterinserting: \n");*插入后输出顺序表中的所有元素* for(n=0;n<(*L).len;n++) printf("%5d",(*L).list[n]); printf("\n\n"); } voidmain() { staticseqlist*L; inte=25; **********blank********** create(L);*调用函数create建立有序表* **********blank********** insert(L,e);*调用函数insert在有序表中插入元素e* } 3.实现单链表的各种基本操作。 (1)源程序代码。 #include"stdio.; DataTypee; H=(NODEPTR)malloc(LEN);*为头结点H分配存储空间* H->next=NULL;*从头结点开始建立单链表* q=H; printf("Pleaseinputthelengthofthelinklist: ");*根据实际情况从键盘输入表长* scanf("%d",&n); printf("Pleaseinputtheeveryelement: ");*从键盘输入线性表的每个元素* for(i=1;i<=n;i++) { p=(NODEPTR)malloc(LEN);*为当前插入链表的结点分配存储空间* scanf("%d",&e); p->data=e;*指向结点的指针变量p指向当前要插入的结点* q->next=p;*指向结点的指针变量q指向当前插入结点的前趋结点,将p作为其后继赋值,完成当前结点的插入* q=p;*当前结点完成插入之后,修改指针变量q,为下一次插入做好准备* } q->next=NULL; returnH; } voidsearch(NODEPTRH,DataTypee)*在单链表中查找指定数据元素e* { NODEPTRp; inti=1; p=H->next;*指针变量p赋值为头结点的后继,从该位置开始查找整个单链表* while(p)*当p不为空时,执行循环* { if(p->data! =e)*指针变量p当前指向结点的数据域不等于查找元素e* { p=p->next;*指针后移,继续向下查找* i++; continue; } else*否则,查找成功,输出该结点的位置* { printf("Searchingissuccessful! \n"); printf("Theplaceofthesearchkeyinthememoryis: %d\n",p); *输出该结点在内存中的存储地址, (2)* printf("Theplaceofthesearchkeyinthelistis: %d\n",i); *输出该结点在线性表中的位置,(3)* break; } } if(p->next==NULL) printf("Thelinklist"); } NODEPTRdelposi(NODEPTRH,inti)*按照指定位置i删除链表中的某个元素* { NODEPTRp,pre; intm; p=H; for(m=1;m<=i;m++)*按照指定位置i寻找需要删除的结点* { pre=p; p=p->next; } pre->next=p->next;*删除指定位置的结点* free(p);*结点删除后,释放存储空间* returnH; } NODEPTRinsafter(NODEPTRH,inti,DataTypee)*在指定位置i之后插入元素e* { NODEPTRp,s; intm; s=(NODEPTR)malloc(LEN);*为插入结点分配存储空间* s->data=e;*指针变量s指向当前的插入结点* p=H; for(m=0;m p=p->next; s->next=p->next; p->next=s;*完成指针的修改,实现结点插入* returnH; } main() { NODEPTRH,p; inti,e; printf("\nFuntion: createback\n"); H=createback(H);*调用createback函数从链尾建立单链表* printf("\nOutputthelinklist: \n");*单链表建立成功后,输出单链表的所有结点* p=H->next; while(p) { printf("%d,%d",p->data,p->next); p=p->next; }* (1)* printf("\n"); printf("\nFuntion: search\n"); printf("Pleaseinputthesearchkey: ");*从键盘输入查找元素e* scanf("%d",&e); search(H,e);*调用search函数在单链表中查找关键字e* printf("\nFuntion: delposi\n"); printf("\nOutputthelinklistbeforedeleting: \n");*删除之前输出单链表的结点* p=H->next;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 九江学院 数据结构 实验报告 完整答案 九江 学院 实验 报告 完整 答案