单链表的基本操作 C语言课程设计

上传人:ag****7 文档编号:187360640 上传时间:2023-02-13 格式:DOC 页数:14 大小:206.50KB
收藏 版权申诉 举报 下载
单链表的基本操作 C语言课程设计_第1页
第1页 / 共14页
单链表的基本操作 C语言课程设计_第2页
第2页 / 共14页
单链表的基本操作 C语言课程设计_第3页
第3页 / 共14页
资源描述:

《单链表的基本操作 C语言课程设计》由会员分享,可在线阅读,更多相关《单链表的基本操作 C语言课程设计(14页珍藏版)》请在装配图网上搜索。

1、课程设计(论文)题 目 名 称 单链表的基本操作 课 程 名 称 C语言程序课程设计 学 生 姓 名 学 号 系 、专 业 信息工程系、网络工程专业 指 导 教 师 成娅辉 2013年 6月 6 日目 录1 前言32 需求分析32。1 课程设计目的32。2 课程设计任务32。3 设计环境32。4 开发语言33 分析和设计33.1 模块设计33.2 系统流程图43.3 主要模块的流程图64 具体代码实现95 课程设计总结125。1 程序运行结果125。2 课程设计体会12参考文献13致 谢131 前言 我们这学期学习了开关语句,循环语句、链表、函数体、指针等的应用,我们在完成课程设计任务时就主要

2、用到这些知识点,本课题是单链表的简单操作,定义四个子函数分别用来创建链表、输出链表、插入数据以及删除数据,主函数中主要用到开关语句来进行选择调用哪个子函数,下面就是课程设计的主要内容.2 需求分析2.1 课程设计目的学生在教师指导下运用所学课程的知识来研究、解决一些具有一定综合性问题的专业课题。通过课程设计(论文),提高学生综合运用所学知识来解决实际问题、使用文献资料、及进行科学实验或技术设计的初步能力,为毕业设计(论文)打基础。2.2 课程设计任务输入一组正整数,以-1标志结束,用函数实现:(1)将这些正整数作为链表结点的data域建立一个非递减有序的单链表,并输出该单链表;(2)往该链表中

3、插入一个正整数,使其仍保持非递减有序,输出插入操作后的单链表;(3)删除链表中第i个结点,输出删除操作后的单链表,i从键盘输入。2.3 设计环境(1)WINDOWS 7系统(2)Visual C+2.4 开发语言C语言3 分析和设计3。1 模块设计定义链表结点类型struct node表示结点中的信息,信息包括数据域data(用于存放结点中的有用数据)以及指针域next(用于存放下一个结点的地址),并将链表结点类型名改为NODE。如下所示:typedef struct nodeint data;struct node next;NODE;定义函数NODE *create_llist_sorte

4、d(),用来创建非递减有序带头结点的单链表,定义四个指针NODEh,*p,q,s,头指针指向第一个结点,并且分配空间给头指针h,使头指针不为空,p指向单链表中某一结点,q指向*p的前驱,*s指向输入的数据,将数据逐个输入,将输入的数据通过循环语句不断进行比较,其中先使q指向h所指位置,p指向h的下一个位置,不断将输入的每一个数据与链表中的数据相比较,找到插入位置,然后移动p,q,直到p为空指针且*s所指数据小于等于p所指数据,从而使数据有序,最后返回头指针。详细程序见后文中的具体代码实现.定义函数void output(),用来输出头指针h所指的单链表,因为此链表有头结点, 所以定义一个指针N

5、ODE p,p指向h的下一个位置,不断地将p所指数据输出并且移动*p,直到p为空指针.详细程序见后文中的具体代码实现。定义函数void insert(NODE *h, int x),使元素x插入到单链表h中之后链表中数据仍有序,定义三个指针NODE *p,q,*m,*q指向头指针所指位置,p指向*q的下一个位置,*m指向要插入的数据x,将数据插入链表中去后将数据不断进行比较,直至*p为空指针且*m所指数据小于等于*p所指数据,移动p,q,使数据仍然有序。详细程序见后文中的具体代码实现.定义函数NODE *del(NODE h, int i),用于删除单链表h中第i个结点,定义两个指针*p,*q

6、,用指针p来从第一个结点开始查找需要删除的结点,指针q是指针p的前驱,查找过程中,不断移动指针p,q,直至找到需要删除的结点,如果p为空指针,则表示链表中没有需要删除的结点,最后返回头指针。详细程序见后文中的具体代码实现。主函数主要是采用开关分支语句对几个子函数进行调用。3.2系统模块流程图开 始输出菜单 1N Y输入n n=1 N Y调用创建单链表函NODE*create_llist_sorted();数n=3n=2?NY调用输出函数void output(NODE *h)Nn=0?n=4n=4?Y调用插入函数void insert(NODE *h, int x);并输出N结 束调用删除函数

7、NODE *del(NODE *h, int i)退出Y结束Y 图3.1系统模块流程图3.3主要模块的流程图(1)输出函数流程图(如图3.2)p=h-nextp!=NULL?N Y输出p-data p=p-next 图3。2. 输出函数流程图(2)插入函数流程图(如图3.3)m=(NODE *)malloc(sizeof(NODE);m-data=x; q=h;p=q-next;m-data=x; q=h;p=q-next;q=h;p=q-next;p!=NULL&m-datap-dataN Yq=q-next;p=p-next;m-next=p;q-next=m;图3。3插入函数流程图(3)

8、删除函数流程图(如图3。4)p=h输入待删结点ip!=NULL&p-data!=i?NYq=p;p=p-next;p=h?NYp=NULL?NNh=h-next;free(p); Yq-next=p-next;free(p);printf(not been findn”)图3。4删除函数流程图(4)创建单链表函数流程图(如图3。5)h=(NODE *)malloc(sizeof(NODE);h-next=NULL输入xx!= -1N Ys=(NODE *)malloc(sizeof(NODE) q=h,p=h-next ;s-data=x; s-next=NULL;p!=NULL&s-data

9、p-data?NYq-next=ssnext=p;s-next=p;p=p-next,q=q-next输入x图3.5创建单链表函数流程图4 具体代码实现/单链表的基本操作/include”stdio.h#includemath。h”#includestring.h”#includestdlib.htypedef struct nodeint data; struct node *next;NODE;/*链表结点类型定义*/*函数声明*/NODE *create_llist_sorted();/*建立一个非递减有序的带头结点的单链表,返回其头指针/void output(NODE *h);/输出

10、头指针h所指单链表*/void insert(NODE *h, int x);/*将元素x插入到单链表h中仍有序/NODE del(NODE h, int i);/删除单链表h中第i个结点*/*主函数*/void main()NODE head;int x,i,n; printf(*单链表的基本操作*n”); /输出菜单*/ printf( 1. 建立n); printf(” 2。 输出n”); printf( 3. 插入n); printf( 4。 删除n”); printf( 0. 退出n); while(1) printf(请选择:); scanf(d”,n); switch(n) ca

11、se 1:head=create_llist_sorted();break; case 2:output(head);break; case 3:printf(please input inserted data:);scanf(”d”,x); insert(head,x);output(head);break; case 4:printf(please input deleted location:”); scanf(%d”,&i);del(head,i);output(head);break; case 0:exit(0); default:printf(”输入错误,请重新选择!n”);

12、/*子函数*/NODE create_llist_sorted()/建立一个非递减有序的带头结点的单链表,返回其头指针*/int x;NODE h,*p,*q,s; /p指向单链表中某一结点,q指向*p的前驱/ h=(NODE *)malloc(sizeof(NODE));hnext=NULL; scanf(d,&x); while(x!=-1) s=(NODE *)malloc(sizeof(NODE); sdata=x; s-next=NULL; for(q=h,p=h-next;p!=NULL&s-datapdata;p=p-next,q=qnext);/*不断比较,找到插入位置。注意:

13、循环条件p!=NULL必须先判断,即放在&左边*/ qnext=s;snext=p; scanf(%d”,&x); return h;void output(NODE h)/输出头指针h所指单链表*/ NODE p;p=hnext;while(p!=NULL)printf(”%d ”,p-data); p=p-next;printf(”n);NODE *del(NODE *h, int i)/删除单链表h中第i个结点/ NODEp,*q; p=h;while(p!=NULL&pdata!=i)q=p;p=p-next;if(p=h)h=hnext;free(p);else if(p=NULL)

14、printf(”not been findn”);elseq-next=p-next;free(p);return(h);void insert(NODE h, int x)/将元素x插入到单链表h中仍有序/ NODE p,*q,*m;m=(NODE *)malloc(sizeof(NODE)); mdata=x; q=h;p=q-next;while(p!=NULL&mdatap-data)q=qnext; p=pnext;m-next=p; q-next=m; 5 课程设计总结5。1 程序运行结果 输入源程序后,先进行调试,经调试无错误后开始运行,屏幕上会显示菜单,会出现提示语“请选择”,

15、选择1即建立了一个链表,然后键入一组正整数,以-1标志结束,按回车键;继续选择2即执行输出函数,按回车键后屏幕上会输出之前键入的数据,按回车键;继续选择3即执行插入函数,按回车键后键入一个需要插入的数据,按回车键屏幕上输出插入数据后的一组新数据,按回车键;继续选择4即执行删除函数,按回车键后键入一个需要删除的数的所在的节点,继续按回车键屏幕上会输出删除节点后的一组新数据,按回车键;继续选择0即退出程序,运行结果如下图所示 图5.1运行结果示意图5。2 课程设计体会 总体来说,这个课程设计的优势在于条理较为清晰,内容比较充实,源程序也是比较清晰明了的,方便使用,不足之处在于流程图不够规范整洁,其

16、他地方都还有待提高。我觉得课程设计中最核心的部分是编程,在编程的过程中,最关键的是要有扎实的知识功底,最重要的是需要细心和耐心.拥有扎实的知识功底,看到课题,我们便能灵活运用老师所教的知识,较为清晰地、快速地想出大概的程序框架,然后再正式地进行编程。在编程时,细心是必要的,因为一个小小的错误便会导致整个程序不能正常运行,便要进行一系列的复杂的调试工作,所以细心能避免一些不必要的麻烦。同时,耐心也是必不可少的,当我们在编程过程中可能会遇到一些困惑和难点以及错误,需要我们有一定的耐心坚持下去,不轻言放弃,不断地进行调试和运行,有不懂的地方和同学讨论,向老师请教,直到使程序正常运行。 通过这次的课程

17、设计,我收获了许多,了解了如何正确规范地进行课程设计,为以后能快速高效进行课程设计打下一定的基础。参考文献1黄同成,周红波程序设计基础教程(C语言)M湖南人民出版社,20112黄同成,黄磊程序设计实践教程(C语言)M湖南人民出版社,20113谭浩强C程序设计(第三版)M北京:清华大学出版社,2005致 谢首先,我想要感谢编写C语言相关书籍的各位老师以及我们的授课老师,让我们了解并掌握了有关C语言的大量的基础知识,让我们有足够的知识储备和扎实的知识功底来顺利地进行我们的课程设计。然后,我要感谢那些在我编写程序时给予我许多帮助和指导的同学和老师,因为是他们让我在百思不得其解的时候豁然开朗,让我理清思路,然后经过不断试验,不断调试运行,才得以把这个程序很好地完成.在同学的帮助、老师的指导过程中,我也学到了许多自己所缺乏的知识,让我又多了几种编程的方法及思路。在这个过程中,我也学会了如何撰写课程设计论文,了解了撰写的格式以及方式。同时,我也要感谢学校领导们给予我们在课程设计过程中的支持与帮助,正是因为他们给我们提供了良好的实验室以及实验器材,才能让我们能在良好舒适的环境内顺利地进行实验,进而顺利完成我们的编程以及课程设计。 14

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!