ImageVerifierCode 换一换
格式:DOCX , 页数:32 ,大小:112.17KB ,
资源ID:11777995      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/11777995.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(算法与数据结构实验报告.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

算法与数据结构实验报告.docx

1、算法与数据结构实验报告2015-2016学年第二学期算法与数据结构课程实验报告专业软件工程学生姓名成晓伟班级软件141学号1410075094实验学时16实验教师徐秀芳信息工程学院实验一 单链表的基本操作一、实验目的1.熟悉C语言上机环境,进一步掌握C语言的基本结构及特点。2.掌握线性表的各种物理存储表示和C语言实现。3.掌握单链表的各种主要操作的C语言实现。4.通过实验理解线性表中的单链表存储表示与实现。二、主要仪器及耗材普通计算机三、实验内容与要求1、用C语言编写一个单链表基本操作测试程序。(1)初始化单链表(2)创建单链表(3)求单链表长度(4)输出单链表中每一个结点元素(5)指定位置插

2、入某个元素(6)查找第i个结点元素的值(7)查找值为e 的结点,并返回该结点指针(8)删除第i个结点(9)销毁单链表2、实验要求(1)程序中用户可以选择上述基本操作。程序启动后,在屏幕上可以菜单形式显示不同功能,当按下不同数字后完成指定的功能,按其他键,则显示错误后重新选择。(2)要求用线性表的顺序存储结构,带头结点的单链表存储结构分别实现。(3)主函数实现对基本操作功能的调用。3、主要代码(1)初始化单链表LinkList *InitList() /创建一个空链表,初始化线性表 LinkList *L; L=(LinkList *)malloc(sizeof(LinkList); L-nex

3、t=NULL; return L;(2)创建单链表/头插法void CreateListF(LinkList *L) LinkList *s; int i=1,a=0; while(1) printf(输入第%d个元素(0表示终止),i+); scanf(%d,&a); if(a=0) break; s=(LinkList *)malloc(sizeof(LinkList); s-data=a; s-next=L-next; L-next=s; (3)求链表长度int ListLength(LinkList *L) /求链表长度 int n=0; LinkList *p=L; while(p-

4、next!=NULL) p=p-next; n+; return(n);(4)在指定位置插入元素int InsertList(LinkList *L,int i,ElemType e) LinkList *p=L,*s; int j=0; while(p!=NULL&jnext; j+; /找出要插入的位置的前一个位置 if(p=NULL) return 0; else s=(LinkList *)malloc(sizeof(LinkList); s-data=e; s-next=p-next; p-next=s; return 1; (5)输出链表void DispList(LinkList

5、 *L) /输出链表 LinkList *p=L-next; while(p!=NULL) printf(%d,p-data); p=p-next; printf(n);(6)查找链表中指定元素int GetElem(LinkList *L,int i) /查找链表中指定元素 LinkList *p=L; int j=0; while(jnext; if(p=NULL) return 0; else return p-data; (7)查找值是e的结点并返回该指针LinkList *LocateElem(LinkList *L,ElemType e) /查找值是e的结点并返回该指针 int i

6、=1; LinkList *p=L; while(p!=NULL) if(p-data=e) return p; if(p=NULL) return NULL; (8)删除元素int ListDelete(LinkList *L,int i,ElemType *e) /删除元素 LinkList *p=L,*q; int j=0; while(p!=NULL&jnext; j+; /找到要删除元素地址的前一个地址 if(p=NULL) return 0; /不能删除 else q=p-next; *e=q-data; p-next=q-next; free(q); /删除成功 return 1

7、; (9)销毁链表void DestroyList(LinkList *L)/销毁链表 LinkList *pre=L,*p=L-next; while(p!=NULL) free(pre); pre=p; p=pre-next; free(pre);main函数:int main() LinkList *L; ElemType e; int i; L=InitList(); CreateListF(L); DispList(L); printf(输入要查找的元素位置:n); scanf(%d,&i); e=GetElem(L,i); printf(%dn,e); printf(单链表长度为:

8、%dn,ListLength(L); printf(输入要删除元素的位置:); scanf(%d,&i); if (iListLength(L) printf(超出范围重新输入); scanf(%d,&i); if(ListDelete(L,i,&e)=0) printf(未找到元素n); else DispList(L); printf(输入插入元素的位置和值:); scanf(%d%d,&i,&e); InsertList(L,i,e); DispList(L); return 0;4、测试数据及测试结果输入:23 56 12 28 45输出:四、注意事项1、存储结构定义和基本操作尽可能用

9、头文件实现。2、采用缩进格式,加足够多的注释。3、注意循环条件、边界条件等。4、善于发现问题、分析问题、解决问题,并总结思考。5、对于算法描述及实现完全理解。五、拓展提高1、若L为带头结点的单链表,删除最大值结点2、将两个单链表合并为一个单链表实验二 循环链表的基本操作一、实验目的熟练掌握线性表的基本操作在链式循环存储结构上的实现。二、主要仪器及耗材普通计算机三、实验内容1、在上一次单链表基本操作的基础上,修改程序,将其改为单循环链表,并实现相关操作。(1)初始化单循环链表(2)创建单循环链表(3)求单循环链表长度(4)输出单循环链表中每一个结点元素(5)指定位置插入某个元素(6)查找第i个结

10、点元素的值(7)查找值为e 的结点,并返回该结点指针(8)删除第i个结点(9)销毁单循环链表2、实验要求(1)程序中用户可以选择上述基本操作。程序启动后,在屏幕上可以菜单形式显示不同功能,当按下不同数字后完成指定的功能,按其他键,则显示错误后重新选择。(2)要求用不带头结点的循环链表实现。(3)具体功能测试由主函数实现。3、主要代码(1)初始化单循环链表void initLinkList(LinkList L)/初始化循环单链表 L=(LinkList)malloc(sizeof(LNode); L-next=L;/创建一个空表(2)创建单循环链表LinkList creat(LinkList

11、 L)/给循环链表赋值 LinkList p,q,r; int N,i=0; /printf(请输入第%d个值:,+i); while(1) printf(请输入第%d个值:,+i); scanf(%d,&N);/输入节点的值 if(N=0)/以0为结尾 break; if(i=1)/当只有一个节点时 p=(LinkList)malloc(sizeof(LNode);/给p节点分配内存空间 p-date =N; p-next =NULL; q=p; else/当节点不为1时 r=(LinkList)malloc(sizeof(LNode); r-date =N; r-next =NULL; q

12、-next =r; q=r;/ if(q!=NULL) q-next =p;/将尾节点指向头节点完成循环 L=p; return L;/返回头指针(3)打印循环链表void print(LinkList L)/打印循环链表 LinkList p; /printf(*n); p=L; /printf(*n); if(p=NULL)/当链表尾空表时 printf(这是一个空表n); while(p-next!=L)/只有当p节点不为尾节点是打印节点中的数据域 /printf(*n); printf(%d ,p-date ); p=p-next ; printf(%dn,p-date );/打印尾节

13、点中的数据(4)求链表的长度int length(LinkList L)/求链表的长度 LinkList p; /printf(*n); int n=1; /printf(*n); p=L; /printf(*n); while(p-next!=L)/当p节点不为尾节点时计数 n+; /printf(*n); p=p-next; return n;/返回链表长度 /printf(%d*n,n);(5)删除指定位置的节点LinkList del(LinkList L,int flag)/删除指定位置的节点 LinkList p,q; int i; p=L; q=L-next ; /int i=1

14、; if(flag=1)/当删除节点为头结点时 while(q-next !=L)/让p节点为尾节点 q=q-next ; L=p-next ;/头结点为L-NEXT节点 q-next =L;/让尾节点指向新的头结点 free(p);/释放p else for(i=1;inext ; q=q-next ; p-next =q-next ; free(q);/删除q节点 return L;/返回头指针(6)查找第i个结点元素的值int search1(LinkList L,int flag)/按照节点的位置返回节点中的数据 LinkList p; int i; p=L; for(i=1;inex

15、t; return p-date;/返回节点的数据(7)查找值为e 的结点,并返回该结点指针int search2(LinkList L,int data)/按照数据来查找节点的位置 LinkList p; int i=1; p=L; while(1) if(p-date=data)/当查找到数据域与查找的数据相同是跳出循环 break; else i+; p=p-next; return i;(8)删除第i个结点LinkList insert(LinkList L,int falg,int data)/指定位置插入元素 LinkList p,s; int i; p=L; s=(LinkLis

16、t)malloc(sizeof(LNode); for(i=1;inext; s-date=data;/将data赋值给s节点 s-next=p-next; p-next=s; return L;(9)销毁单循环链表LinkList destroy(LinkList L)/销毁循环链表 LinkList p,q; p=L-next ; while(p!=L) q=p-next ; free(p); p=q; free(L); L=NULL; return L;main函数:int main() LinkList L=NULL; int m,k,Case,Length,DAT1,flag,P,e

17、; printf(*1.创建一个循环链表*n); printf(*2.打印所创建的循环链表*n); printf(*3.插入节点*n); printf(*4.删除节点*n); printf(*5.求循环的长度*n); printf(*6.查找第i节点*n); printf(*7.查找某个值得节点*n); printf(*8.销毁链表*n); printf(*9.删除最大节点*n); printf(*10.退出程序*n); for(;) printf( 请输入操作的序号 n); scanf(%d,&Case); switch(Case) case 1: initLinkList(L); L=cr

18、eat(L); break; case 2: print(L); break; case 3: printf(请输入需要插入的位置(之后)及其数据n); scanf(%d%d,&m,&k); L=insert(L,m,k); print(L); break; case 4: printf(请输入需要删除的节点n); scanf(%d,&Case); L=del(L,Case); print(L); /printf(%d,Length); break; case 5: Length=length(L); printf(循环的长度是%dn,Length); break; case 6: print

19、f(请输入需要查找的节点序号: ); scanf(%d,&flag); DAT1=search1(L,flag); printf(所查找的节点数据为%dn,DAT1); break; case 7: printf(输入需要查找的值n); scanf(%d,&e); P=search2(L,e); printf(所查找的位置是%dn,P); break; case 8: L=destroy(L); print(L); break; /case 10: case 9: exit(0); break; return 0;4、测试数据及测试结果输入:1 2 3 4 5输出:四、注意事项1、存储结构定义

20、和基本操作尽可能用头文件实现。2、采用缩进格式,加足够多的注释。3、注意循环条件、边界条件等。五、拓展提高1、双向链表中间结点P后插入新结点S的算法;2、删除双向链表中间结点P后的结点Q的算法;实验三 栈的基本操作及应用一、实验目的1、掌握栈的顺序表示和基本操作实现;2、熟练掌握栈的基本操作;3、会用栈解决一些实际应用;4、掌握十进制数转化为N进制整数的工作原理。二、主要仪器及耗材普通计算机三、实验内容1、栈的基本运算(1)InitStack(SqStack *s) /初始化栈(2)Push(SqStack *s, SElemType e)/入栈操作(3)pop(SqStack *s, SEl

21、emType e)/出栈操作(4)GetTop(SqStack *s, SElemType e)/取栈顶元素(5)IsEmpty(SqStack *s) /判断是否为空(6)GetLength(SqStack *s) /求栈的长度2、创建一个长度为100的顺序栈T,每个数据元素的类型为字符型char。编写代码,利用栈的基本运算和顺序栈T,正序输入并存储26个英文字母AZ,然后逆序输出。3、利用栈的基本运算,写出十进制转化为二进制(八进制呢?十六进制呢?N进制呢?)的具体实现,并输出。4、实验要求(1)程序中用户可以选择上述基本操作。程序启动后,在屏幕上可以菜单形式显示不同功能,当按下不同数字后

22、完成指定的功能,按其他键,则显示错误后重新选择。(2)要求用不带头结点的循环链表实现。(3)具体功能测试由主函数实现。5、主要代码(1)初始化栈void InitStack(sqStack *s)/初始化栈,构造一个空栈 s-base=(ElemType*)malloc(STACK_INIT_SIZE*sizeof(ElemType);/动态分配存储空间 if(!s-base) exit(0);/存储分配失败 s-top=s-base;/栈空标记 s-stacksize=STACK_INIT_SIZE;(2)取栈顶元素int GetTop(sqStack *s, ElemType e)/取栈顶

23、元素 *(s-top)=e; return e;(3)元素入栈void push(sqStack *s,ElemType e)/元素入栈 if(s-top-s-base=s-stacksize) s-base=(ElemType*)realloc(s-base,(s-stacksize+STACK_INIT_SIZE)*sizeof(ElemType);/栈满,追加存储空间 if(!s-base) exit(0); *(s-top)=e;/输入元素e s-top+;/栈顶指针+(4)元素出栈void pop(sqStack *s,ElemType *e)/出栈 if(s-top=s-base)

24、return;/ *e=*-(s-top);(5)求栈的长度int stacklen(sqStack s)/栈的长度 return(s.top-s.base);(6)判断是否栈空int stackempty(sqStack *s)/判断是否栈空 if(s-top=s-base) return 1; else return 0;(7)十进制转化为八进制void conversion() /十进制转化为八进制 sqStack s; int n,t; ElemType e; InitStack(&s); printf(请输入正整数:); scanf(%d,&n); t=n; while(n) pus

25、h(&s,n%8); n=n/8; printf(十进制%d转化为八进制为:,t); while(!stackempty(&s) pop(&s,&e); printf(%d,e); printf(n);(8)二进制转化为十进制void BintoDec()/二进制转化为十进制 ElemType ch; sqStack s; int len,i,sum=0; InitStack(&s); printf(请输入二进制数,输入#表示结束!n); scanf(%c,&ch); while(ch!=#) push(&s,ch); scanf(%c,&ch); getchar(); /清除缓冲区 len=

26、stacklen(s); printf(栈的当前容量是:%dn,len); for(i=0;ilen;i+) pop(&s,&ch); sum=sum+(ch-48)*pow(2,i); printf(转化为十进制数是%dn,sum);(9)26个字母逆序输出void AZZA()/字母逆序输出 ElemType ch26,e; sqStack s; int len,i; for(i=0;i26;i+) chi=A+i; InitStack(&s); for(i=0;i26;i+) push(&s,chi); len=stacklen(s); printf(栈的当前容量是:%dn,len); while(!stackempty(&s) pop(&s,&e); print

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1