实验报告学生.docx
- 文档编号:29742095
- 上传时间:2023-07-26
- 格式:DOCX
- 页数:76
- 大小:117.66KB
实验报告学生.docx
《实验报告学生.docx》由会员分享,可在线阅读,更多相关《实验报告学生.docx(76页珍藏版)》请在冰豆网上搜索。
实验报告学生
《数据结构》
实验报告
班级学号:
11214030236
姓名:
庄彦兴
《数据结构》
实验报告
学院:
信息科学与技术学院
专业:
信息系统与信息管理
学期:
2013~2014学年第一学期
班级:
信A1232班
学号:
1124030236
姓名:
庄彦兴
实验1函数、指针、结构体复习
院(系):
信息科学与技术学院课程名称:
数据结构教师签名:
班级
信A1232
学号
11214030236
实验室
专业
信息系统与信息管理
姓名
庄彦兴
计算机号
实验名称
所用软件
实验成绩
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 #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********************/ ____________________;/*填空位置1: 变量定义*/ ____________________;/*填空位置2: 从键盘输入需要判定的字符串*/ ____________________;/*填空位置3: 调用func函数*/ ____________________;/*填空位置4: 根据返回值flag的值,输出判定结果*/ } 该算法的时间复杂度是: ____________________。 2.定义函数intf(char*x,chary)判断x所指的字符串是否包含字符y,若是则函数返回1,否则返回0。 写出完整的源程序代码。 #include #include intf(char*x,chary)/*写出自定义函数f的函数体部分,实现函数功能*/ { } voidmain() { charstr[10],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函数的函数体部分,实现函数功能*/ { } 实验2线性表 院(系): 信息科学与技术学院课程名称: 数据结构教师签名: 班级 信1232 学号 11214030236 实验室 专业 信息管理与信息系统 姓名 庄彦兴 计算机号 实验名称 所用软件 实验成绩 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*/ intlast;/*定义线性表的最后一个元素的下标*/ }seqlist; voidcreate(seqlist*L)/*建立一个顺序存储的线性表*/ { inti; printf("Pleaseinputthelenoftheseqlist: ");/*从键盘输入当前顺序表的实际长度*/ scanf("%d",&(*L).last); printf("Pleaseinputtheeveryelementoftheseqlist: "); for(i=0;i<=(*L).last;i++)/*从键盘输入顺序表的每个元素*/ scanf("%d",&(*L).list[i]); printf("Outputtheeveryelementoftheseqlist: \n"); for(i=0;i<=(*L).last;i++)/*顺序表建立成功后,输出整个顺序表*/ printf("%5d",(*L).list[i]);/*运行结果 (1)*/ printf("\n"); } voidaccess(seqlist*L,inti)/*根据指定位置访问线性表*/ { if((i<0)||(i>(*L).last))/*判断给定位置是否为合法取值*/ printf("Theplaceisnotcorrect! \n"); else printf("%d\n",(*L).list[i]);/*运行结果 (2)*/ } voidbefore_after(seqlist*L,inti)/*根据指定位置寻找其前趋元素和后继元素*/ { if((i<0)||(i>(*L).last)) printf("Theplaceisnotcorrect! \n"); elseif(i==0) printf("%d\n",(*L).list[i+1]); elseif(i==(*L).last) printf("%d\n",(*L).list[i-1]); elseif((i>0)&&(i<(*L).last)) printf("%d,%d\n",(*L).list[i-1],(*L).list[i+1]);/*运行结果(3)*/ } voidsearch(seqlist*L,intkey)/*根据给定元素key查找顺序表*/ { intm; for(m=0;m<=(*L).last;m++) { if((*L).list[m]! =key) continue; else { printf("Seachingisseccessful! \n"); printf("Theplaceofthesearchkeyis: %d\n",m); break; } } if(m>(*L).last) printf("Theseqlisthasnothekey! \n");/*运行结果(4)*/ } voiddelete(seqlist*L,inti)/*删除顺序表的元素*/ { intm; printf("Outputtheeveryelementoftheseqlistbeforedeleting: \n");/*删除前输出顺序表中的所有元素*/ for(m=0;m<=(*L).last;m++) printf("%5d",(*L).list[m]);/*运行结果(5)*/ printf("\n"); for(m=i;m<=(*L).last;m++)/*删除位置之后的所有元素依次左移一位*/ (*L).list[m]=(*L).list[m+1]; (*L).last--; printf("Outputtheeveryelementoftheseqlistafterdeleting: \n");/*删除后输出顺序表中的所有元素*/ for(m=0;m<(*L).last;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).last;m++) printf("%5d",(*L).list[m]);/*运行结果(7)*/ printf("\n"); (*L).last++; for(m=(*L).last;m>=i;m--)/*插入位置之后的元素依次右移一位*/ (*L).list[m+1]=(*L).list[m]; (*L).list[i]=e;/*在指定位置i上插入元素e*/ printf("Outputtheeveryelementoftheseqlistafterinserting: \n");/*插入后输出顺序表中的所有元素*/ for(m=0;m<(*L).last;m++) printf("%5d",(*L).list[m]);/*运行结果(8)*/ printf("\n"); } voidmain() { seqlist*L,l;/*注意: l是字母L的小写*/ inti,e; L=&l; 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: ② ③ ④ ⑤Outputtheeveryelementoftheseqlistbeforedeleting: ⑥Outputtheeveryelementoftheseqlistafterdeleting: ⑦Outputtheeveryelementoftheseqlistbeforeinserting: ⑧Outputtheeveryelementoftheseqlistafterinserting: 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*/ intlast;/*定义线性表的最后一个元素的下标*/ }seqlist; voidcreate(seqlist*L)/*根据已知条件建立一个有序的顺序表*/ { inti; printf("\n\nPleaseinputthelengthoftheorderedseqlist: "); /**********blank**********/ _____________________;/*从键盘输入有序表的实际长度,已知(*L).len=10*/ printf("\n\nPleaseinputtheeveryelementoftheorderedseqlist: "); for(i=0;i<=(*L).last;i++) /**********blank**********/ _____________________; /*功能: 从键盘输入有序表中的每个元素,{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).last;n++) printf("%5d",(*L).list[n]); printf("\n"); (*L).last++; for(i=(*L).last-1;i>=0;i--)/*i变量自减*/ /**********blank**********/ if(_____________________)/*确定插入位置*/ { /**********blank**********/ _____________________;/*插入位置之后的元素依次右移一位*/ j=i; } /**********blank**********/ _____________________;/*在确定的插入位置j上插入元素e*/ printf("\n\nOutputtheeveryelementoftheseqlistafterinserting: \n");/*插入后输出顺序表中的所有元素*/ for(n=0;n<=(*L).last;n++) printf("%5d",(*L).list[n]); printf("\n\n"); } voidmain() { seqlist*L,l;/*l是字母L的小写*/ inte=25; L=&l; /**********blank**********/ _____________________;/*调用函数create建立有序表*/ /**********blank**********/ _____________________;/*调用函数insert在有序表中插入元素e*/ } 3.实现单链表的各种基本操作。 (1)源程序代码。 #include"stdio.h" #include"malloc.h" typedefintDataType; typedefstructlinknode { DataTypedata;/*数据元素的类型,可以替换为任意实际需要的类型*/ structlinknode*next;/*指示后继结点地址的指针*/ }NODE;/*定义结点类型和指向结点的指针类型*/ #defineLENsizeof(NODE)/*用宏定义一个结点的长度,以便动态分配结点时使用*/ NODE*createback(NODE*H)/*自定义函数: 从链尾插入结点建立链表*/ { NODE*p,*q; inti,n; DataTypee; H=(NODE*)malloc(LEN);/*为头结点H分配存储空间*/ H->next=NULL;/*从头结点开始建立单链表*/ q=H; printf("Pleaseinputthelengthofthelinklist: ");/*根据实际情况从键盘输入表长*/ scanf("%d",&n); printf("Pleaseinputtheeveryelement: ");/*从键盘输入线性表的每个元素*/ for(i=1;i<=n;i++) { p=(NODE*)malloc(LEN);/*为当前插入链表的结点分配存储空间*/ scanf("%d",&e); p->data=e;/*指向结点的指针变量p指向当前要插入的结点*/ q->next=p;/*指向结点的指针变量q指向当前插入结点的前趋结点,将p作为其后继赋值,完成当前结点的插入*/ q=p;/*当前结点完成插入之后,修改指针变量q,为下一次插入做好准备*/ } q->next=NULL; returnH; } voidsearch(NODE*H,DataTypee)/*在单链表中查找指定数据元素e*/ { NODE*p; 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("Thelinklisthas
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实验 报告 学生