




免费预览已结束,剩余10页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
南昌航空大学数学与信息科学学院实验报告南昌航空大学数学与信息科学学院实 验 报 告课程名称: 链表的综合操作 实验名称: 制作综合性多媒体课件 实验类型: 验证性 综合性 设计性实验室名称: 数学实验室 班级学号: 08071213 学生姓名: 刘哲强 任课教师(教师签名): 成 绩: 实验日期: 一、实验目的 链表是一种常见而重要的数据结构,进行本次实验过后,应基本掌握链表的结构原理、如何创建链表、如何输出结点数据、如何插入结点、如何删除结点。二、实验用仪器设备、器材或软件环境win-tcMicrosoft Visual C+ 2008 Express EditionMicrosoft office三、实验原理、方案设计、程序框图、预编程序等 通过所学的知识,进行创建链表,打印链表,插入结点,删除结点。 结合课本上的函数,进行改进,得到自己的一个程序。 和课本上的程序思路都是一样的,只是传递的数据类型和个数可能会不一样,而且还需创建一个菜单函数,用来提示我们要进行的操作,让使用者更加清晰地使用程序。 所有的程序代码:#include#include#define NULL 0#define LEN sizeof(struct student)#include#include#includestruct student long num; float tel; char add10; long zip; struct student *next;int n; /* n 为全局变量,用于统计结点的个数*/*-creat函数-*/ struct student *creat() /* 创建creat函数用于建立链表*/ struct student *head; struct student *p1,*p2; n=0; p2=(struct student *)malloc(LEN); /* 开辟一个大小为LEN的内存单元*/ p1=p2; printf(请输入学号:);scanf(%ld,&p1-num); /* 输入学号*/ if(p1-num!=0) printf(请输入电话:);scanf(%f,&p1-tel); /* 输入电话号码*/ printf(请输入地址:);scanf(%s,p1-add); /* 输入地址*/ printf(请输入邮编:);scanf(%ld,&p1-zip); /* 输入邮编*/ printf(ok! 请输入下一个结点的信息n); /* 提示已经输好了一位同学的信息*/ head=NULL; while(p1-num!=0) /* 如果输入的学号不是0,刚继续输入其余的同学的信息*/ n=n+1; if(n=1) head=p1; else p2-next=p1; p2=p1; p1=(struct student *)malloc(LEN); printf(请输入学号:);scanf(%ld,&p1-num); if(p1-num!=0) printf(请输入电话:);scanf(%f,&p1-tel); printf(请输入地址:);scanf(%s,p1-add); printf(请输入邮编:);scanf(%ld,&p1-zip); printf(ok! 请输入下一个结点的信息n); p2-next=NULL; return head; /* 结束creat函数*/*-print函数-*/void print(struct student *head) /* 开始打印函数*/ struct student *p; printf(n Now,These %d records are:n,n); p=head; if(head!=NULL) /* 如果链表不是空,则打印每个结点信息*/ printf(-|- |-|-n); printf(学号 |电话 |地址 |邮编 n); do printf(-|- |-|-n); printf(0%-12ld|%-13.0f|%-13s|%-13ldn,p-num,p-tel,p-add,p-zip); p=p-next; while(p!=NULL); printf(-|- |-|-n); else printf(链表是空的!n); /* 如果链表是空表,刚提示这个链表是空表*/ /* 结束print函数*/*-del函数-*/struct student *del(struct student *head,long num) /* 开始创建del函数,用于删除结束*/ struct student *p1,*p2; if(head=NULL) printf(n链表是空的!n); return head; /* 用于检查链表是否为空,如果为空,刚提示这个链表为空表*/ p1=head; while(num!=p1-num & p1-next!=NULL) p2=p1;p1=p1-next; if(num=p1-num) /* 找到对应的结点*/ if(p1=head) head=p1-next; else p2-next=p1-next; printf(删除:0%ldn,num); n=n-1; else printf(0%ld 没有找到!n,num); /* 没有打到对应的结点,则提示没有找到*/ return head;/*-insert函数-*/struct student *insert(struct student *head,struct student *lnew) /* 创建insert函数,用于插入结点,返回值为一个指针*/ struct student *p0,*p1,*p2; p1=head; p0=lnew; if(head=NULL) head=p0;p0-next=NULL; /* 结果链表为空表,刚把插入的结点指针给头指针,结点的next为空*/ else while(p0-nump1-num) & (p1-next!=NULL) /* 寻找该插入的位置*/ p2=p1; p1=p1-next; if(p0-numnum) /* 找到了该插入的位置*/ if(head=p1) head=p0; /* 放在最前面*/ else p2-next=p0; /* 结点插到p1,p2之间*/ p0-next=p1; else p1-next=p0;p0-next=NULL; /* 结点插到最后*/ n=n+1; return head; /* 结点数加*/ /* 结束insert函数的建立*/*-menubar函数-*/int menubar() /*创建菜单函数*/ int flag=1; /*用来做记号*/ int c; /*用来存储使用者选择的菜单代号*/ printf(nn* 链表综合处理 *n); printf(0:创建链表 -n); printf(1:输出链表n); printf(2:插入结点 菜单n); printf(3:删除结点n); printf(4:退出 -n); printf(*); printf(n请根据你想执行的命令,输入对应的04的数:); scanf(%d,&c); /*接收使用都所输入的代号*/ while(flag) /*flag用来标记,如果为链表为空,或者使用者第一次输入的不是0或者不是4,则需要重新输入*/ if(n=0&c!=0&c!=4) printf(在建立链表之前请先输入建立链表n); printf(n请输入04的数:); scanf(%d,&c); flag=1; else flag=0 ; while( c4 ) /*表示链表已经创建,但输入的不能大于4,或者小于0*/ printf(n请输入4的数:); scanf(%d,&c); return c; /*返回c的值*/ /*-main函数-*/void main() /*开始主函数*/ struct student *head,*lnew; long del_num; for(;) /*开始for循环*/ switch (menubar() case 0:printf(请输入创建的链表的结点的信息:n); head=creat(); break; case 1:print(head); break; case 2: printf(n请输入要插入的结点的信息:n); lnew=(struct student *)malloc(LEN); printf(请输入学号:);scanf(%ld,&lnew-num); if(lnew-num!=0) printf(请输入电话:);scanf(%f,&lnew-tel); printf(请输入地址:);scanf(%s,lnew-add); printf(请输入邮编:);scanf(%ld,&lnew-zip); while(lnew-num!=0) head=insert(head,lnew); print(head); printf(请输入下一个要插入的结点的信息:n); lnew=(struct student *)malloc(LEN); printf(请输入学号:);scanf(%ld,&lnew-num); if(lnew-num!=0) printf(请输入电话);scanf(%f,&lnew-tel); printf(请输入地址:);scanf(%s,lnew-add); printf(请输入邮编:);scanf(%ld,&lnew-zip); printf(ok! 请输入下一个要插入的结点的信息n); break; case 3:printf(n请输入你想删除的结点的学号:); scanf(%ld,&del_num); while(del_num!=0) head=del(head,del_num); print(head); printf(n请输入你想删除的结点的学号:); scanf(%ld,&del_num); break; case 4: system(CLS); printf(谢谢您的使用nnnn); getch(); exit(0); /*退出for循环*/ /*结束主函数*/图1使用链表的知识及课本上的creat 、print、del、insert、main函数基本构成我所做的链表。学号我用长整型来存储,在输出的时候在其前面多加一个0就可以了;电话号码,我则选择了浮点型的数据,在打印的时候,不要打印小数点后面的数字就可以了;地址我用字符数组来存储,用来存储四个汉字;邮编我则用长整型存储。 开始运行程序: 如果第一次输入的不是0(创建链表) 或者不是4(退出程序),程序则会提示你要先创建链表,即最先要输入0先创建链表:(图1)输入结点的 图2学号、电话、地址、邮编,输完一个同学的所有的信息后,程序会提示你输入下一个结点的信息,直到你输入的学号为0,程序就会返回主菜单。我先按老师提出的要求输入10个同学的信息。图2为刚开始建立链表时的运行情况。图4图3 图3为创建链表时所输入的结点的信息,总共输入了10个结点的信息,输入完10个同学的信息后,再输入学号时输入0,则会结束创建链表函数,程序就会返回主菜单。再输入1,则会执行打印函数。将刚刚输入的所有的结点的信息打印到终端。见图4图5现在再执行2(插入结点): 我先插入学号 为08071213(图5)程序会将此结点插入最后,然后再输入学号为 08071211(图6),通过观察以验证程序对插入结点的位置是否进行过判断。图6见图7,可知插入程序没有问题。 图7图8 再执行3(删除结点),见图8,我想删除的学号为08071211,我输入进去后马上可以得到新的链表并会打印出来,观察可得08071211已被删除,再输入里面没有的学号的,观察运行结果(图9)。图9 输入学号为0,返回主菜单。图10再执行4(退出函数),我加了简单的一句“谢谢您的使用”,并在最后有个getch(),后面还有exit(0)语句,就是打印“谢谢您的使用”(图10)后,就会执行到getch(),从终端接收一个字符后,就会执行后面的语句exit(0)即退出for循环,整个主函数也就结束了。四、实验过程中需要记录的实验数据表格学号电话地址邮编0807120115083846656江西8732430807120215083847680江西7642450807120315070406656江西2874340807120415083847680江西2843530807120513876349952云南2385430807120615083846656安徽2139430807120715098323968贵州8739840807120815083848704海南9882420807120915098324992湖北8732420807121015083847680四川8732430807121115070403584江苏8723450807121315083847680江西333139五、实验步骤、程序调试方法大多数情况下win-tc 和vc+ 会提醒错误在什么地方,然后我就去提示的地方修正程序。一步一步地就可以让程序正常运行了而且输入、打印、删除、插入程序运行正常。六、实验中存在的问题及解决方案刚开始由于学号都是由0开始,所以我选择了字符数组来存储,但考虑到这样会浪费很多内存空间,因为如果用字符数组来存储学号,则一个学号要用9个字节,而用长整型只需要4个字节,所以我最后选择了长整型变量,但这需要一些处理,因为长整型数据不可能以0开头,所以只需要在打印的时候在前面加一个0字符就可以了。刚开始结点的电话号码信息
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年道路监控行业研究报告及未来行业发展趋势预测
- 2025年1,3-金刚烷二醇行业研究报告及未来行业发展趋势预测
- 2025年定时器插座行业研究报告及未来行业发展趋势预测
- 2025年儿童坐便器行业研究报告及未来行业发展趋势预测
- 城市轨道交通行车调度员入职考核试卷及答案
- 2025年安庆怀宁县县属国有企业副总经理级别高管公开引进2名备考模拟试题及答案解析
- 小学教师专业发展读书心得范文
- 2025年合肥市西递小学、阳光小学教师招聘备考考试试题及答案解析
- 2026腾讯校园招聘备考练习试题及答案解析
- 2025年安庆生态环境监测中心劳务派遣驾驶员招聘3名考试参考题库及答案解析
- 2025年巷道掘砌工(技师)职业技能鉴定理论考试题库(含答案)
- 小学五爱教育
- 开学第一课消防安全知识课件
- 香港劳务派遣合同范本年
- 2025年威海桃威铁路有限公司招聘笔试参考题库含答案解析
- 妊娠期高血压疾病的观察及护理
- 临床骨筋膜室综合征护理业务学习
- 医院DIP支付方式改革工作实施方案
- 企业与高校合作共建实验室协议
- 租房合同范本下载(可直接打印)
- JGJT46-2024《施工现场临时用电安全技术标准》条文解读
评论
0/150
提交评论