九江学院 数据结构 实验报告 完整答案.docx
- 文档编号:9818379
- 上传时间:2023-02-06
- 格式:DOCX
- 页数:95
- 大小:189.82KB
九江学院 数据结构 实验报告 完整答案.docx
《九江学院 数据结构 实验报告 完整答案.docx》由会员分享,可在线阅读,更多相关《九江学院 数据结构 实验报告 完整答案.docx(95页珍藏版)》请在冰豆网上搜索。
九江学院数据结构实验报告完整答案
《数据结构》
实验报告
班级学号:
姓名:
《数据结构》
实验报告
学院:
信息科学与技术学院
专业:
学期:
班级:
学号:
姓名:
易网返利网——淘宝购物返现
逐新时尚-品牌服装-提供:
实验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 intfunc(char*str) { inti,j,t,flag; t=strlen(str); for(i=0,j=t-1;i<=t/2;i++,j--) { if(str[i]==str[j])continue; else {flag=0;break;} } if(i>=t/2)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 #include intf(char*x,chary)/*写出自定义函数f的函数体部分,实现函数功能*/ { inti=0,t,flag=0; while(x[i]! ='\0') { if(y==x[i]){flag=1;break;} i++; } returnflag; } voidmain() { char*str,ch; intt; gets(str); scanf("%c",&ch); t=f(str,ch); printf("t=%d\n",t); } 3.用结构体类型编写一个程序,输入一个学生的学号、姓名及3门课的成绩,计算并输出其平均成绩。 写出完整的源程序代码。 #include structstudent { intid; charname[10]; floatscore[3]; }s; main()/*写出main函数的函数体部分,实现函数功能*/ { 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=sum/3; 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 #defineMaxsize100 typedefintdatatype; typedefstructseqnode/*顺序表的类型定义*/ { datatypelist[Maxsize];/*定义一个存放顺序表的一维数组list*/ intlen;/*定义线性表的实际长度*/ }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("Theseqlisthasnothekey! \n");/*运行结果(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("\n--------------------function: create--------------------\n"); create(L);/*调用函数create建立一个顺序表*/ printf("\n--------------------function: access--------------------\n"); printf("Pleaseinputtheposition: "); scanf("%d",&i);/*从键盘输入访问位置i*/ access(L,i);/*调用函数access根据指定位置访问顺序表*/ printf("\n--------------------function: before_after--------------------\n"); printf("Pleaseinputtheposition: "); scanf("%d",&i);/*从键盘输入指定位置i*/ before_after(L,i);/*调用函数before_after根据位置i确定前趋元素和后继元素*/ printf("\n--------------------function: search--------------------\n"); printf("Pleaseinputthesearchkey: "); scanf("%d",&e);/*从键盘输入查找元素e*/ search(L,e);/*调用函数search根据关键字e查找顺序表*/ printf("\n--------------------function: delete--------------------\n"); printf("Pleaseinputthedeleteposition: "); scanf("%d",&i);/*从键盘输入删除位置i*/ delete(L,i);/*调用函数delete删除指定位置i的元素*/ printf("\n--------------------function: 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 4Theseqlisthasnothekey! ⑤Outputtheeveryelementoftheseqlistbeforedeleting: 12345678910 ⑥Outputtheeveryelementoftheseqlistafterdeleting: 1234578910 ⑦Outputtheeveryelementoftheseqlistbeforeinserting: 1234578910 ⑧Outputtheeveryelementoftheseqlistafterinserting: 1234567828910 2.在提示/**********blank**********/下面填写合适的内容完成程序设计。 已知一个有序(升序)的顺序表,现有一个数据e,请将e插入到该顺序表中并要求插入后顺序表依然有序。 提示: (1)顺序表中原有数据个数为10个,依次是{1,3,5,7,12,45,67,89,92,99}。 (2)需要插入的数据e值为25。 (3)注意表长的变化。 (4)有序表的插入,需要分两步完成: 第一步确定插入位置,第二步在插入位置上插入指定的数据。 (5)程序运行结果如图2-1所示。 图2-1实验运行结果 #defineMaxsize100 #include typedefintdatatype; typedefstructseqnode/*顺序表的类型定义*/ { datatypelist[Maxsize];/*定义一个存放顺序表的一维数组list*/ intlen;/*定义线性表的实际长度*/ }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]); /*从键盘输入有序表中的每个元素,{1,3,5,7,12,45,67,89,92,99}*/ } 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.h" #include"malloc.h" typedefintDataType; typedefstructlinknode { DataTypedata;/*数据元素的类型,可以替换为任意实际需要的类型*/ structlinknode*next;/*指示后继结点地址的指针*/ }NODE,*NODEPTR;/*定义结点类型和指向结点的指针类型*/ #defineLENsizeof(NODE)/*用宏定义一个结点的长度,以便动态分配结点时使用*/ NODEPTRcreateback(NODEPTRH)/*自定义函数: 从链尾插入结点建立链表*/ { NODEPTRp,q; inti,n; 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=
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 九江学院 数据结构 实验报告 完整答案 九江 学院 实验 报告 完整 答案