C课程设计报告链表.docx
- 文档编号:7211764
- 上传时间:2023-01-21
- 格式:DOCX
- 页数:16
- 大小:211.45KB
C课程设计报告链表.docx
《C课程设计报告链表.docx》由会员分享,可在线阅读,更多相关《C课程设计报告链表.docx(16页珍藏版)》请在冰豆网上搜索。
C课程设计报告链表
课程设计(论文)
题目名称单链表的基本操作
课程名称C语言程序课程设计
学生姓名依
学号1341302021
系、专业信息工程系、计算机科学与技术专业
指导教师成娅辉
2014年5月10日
1前言
编写一个单链表程序来。
输入一组正整数,以-1标志结束,往该链表中插入一个正整数,使其仍保持非递减有序,删除链表中第i个结点,在每次执行链表结束时都要输出执行该操作之后的链表,最后结束该链表。
2需求分析
2.1课程设计目的
学生在教师指导下运用所学课程的知识来研究、解决一些具有一定综合性问题的专业课题。
通过课程设计(论文),提高学生综合运用所学知识来解决实际问题、使用文献资料、及进行科学实验或技术设计的初步能力,为毕业设计(论文)打基础。
2.2课程设计任务
(1)输入一组正整数,以-1标志结束,用函数实现;
(2)将这些正整数作为链表结点的data域建立一个非递减有序的单链表,并输出该单链表;
(3)往该链表中插入一个正整数,使其仍保持非递减有序,输出插入操作后的单链表;
(4)删除链表中第i个结点,输出删除操作后的单链表,i从键盘输入。
2.3设计环境
(1)WINDOWS2000/2003/XP/7/Vista系统
(2)VisualC++或TC集成开发环境
2.4开发语言
C语言
3分析和设计
(1)首先我们要定义一个函数用来建立一个链表;要使这个链表中个数据能保持一个非递减有序。
(2)建立一个函数输出这个链表中的所有数据。
(3)然后我们要定义一个函数用来插入一个数链表任然要保持有序;首先我们要通过for(q=h,p=h->next;p!
=NULL&&s->data>p->data;p=p->next,q=q->next);
这语句来找打其位置。
(4)最后一个函数用来删除第i个结点,关键要把指针指向第i个结点。
然后删除它。
3.1模块设计
设定一个总函数包括几个子函数还实现题目的功能。
程序中所用到的函数:
(1)定义函数create_list_sorted(),创建一个非递减有序的链表;
(2)定义函数output(),输出链表里的值;
(3)定义函数insert(),把一个数插入链表中,链表任然保持非递减有序。
(4)定义函数del(),输入i,然后删除链表中的第i个结点。
3.2系统流程图
图3.1系统流程图
3.3主要模块的流程图
4具体代码实现
/*单链表的基本操作*/
#include"stdio.h"
#include"math.h"
#include"string.h"
#include"stdlib.h"
typedefstructnode
{intdata;
structnode*next;
}NODE;/*链表结点类型定义*/
/********函数声明********/
NODE*create_list_sorted();
/*建立一个非递减有序的带头结点的单链表,返回其头指针*/
voidoutput(NODE*h);/*输出头指针h所指单链表*/
voidinsert(NODE*h,intx);/*将元素x插入到单链表h中仍有序*/
voiddel(NODE*h,inti);/*删除单链表h中第i个结点*/
/********主函数********/
voidmain()
{NODE*head;intx,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)
{case1:
head=create_list_sorted();break;
case2:
output(head);break;
case3:
printf("pleaseinputinserteddata:
");
scanf("%d",&x);insert(head,x);output(head);break;
case4:
printf("pleaseinputdeletedlocation:
");
scanf("%d",&i);del(head,i);output(head);break;
case0:
exit(0);
default:
printf("输入错误,请重新选择!
\n");
}
}
}
/********子函数********/
NODE*create_list_sorted()
/*建立一个非递减有序的带头结点的单链表,返回其头指针*/
{intx;NODE*h,*p,*q,*s;/*p指向单链表中某一结点,q指向*p的前驱*/
h=(NODE*)malloc(sizeof(NODE));h->next=NULL;
scanf("%d",&x);
while(x!
=-1)
{s=(NODE*)malloc(sizeof(NODE));
s->data=x;
s->next=NULL;
for(q=h,p=h->next;p!
=NULL&&s->data>p->data;p=p->next,q=q->next);/*不
断比较,找到插入位置。
注意:
循环条件p!
=NULL必须先判断,即放在&&左边*/
q->next=s;s->next=p;
scanf("%d",&x);
}
returnh;
}
voidoutput(NODE*h)/*输出头指针h所指单链表*/
{NODE*p;
for(p=h->next;p!
=NULL;p=p->next)
printf("%d",p->data);
printf("\n");
}
voidinsert(NODE*h,intx)/*将元素x插入到单链表h中仍有序*/
{NODE*p,*q,*s;
s=(NODE*)malloc(sizeof(NODE));
s->data=x;s->next=NULL;
for(q=h,p=h->next;p!
=NULL&&s->data>p->data;p=p->next,q=q->next);
q->next=s;s->next=p;
}
voiddel(NODE*h,inti)/*删除单链表h中第i个结点*/
{NODE*p,*q;intj;
p=h;q=h;
for(j=2;p!
=NULL&&j<=i+1;j++)
{q=p;p=p->next;}
q->next=p->next;
}
5课程设计总结
5.1程序运行结果
5.2课程设计体会
在课程设计中,我们遇到了大大小小很多个问题,在发现问题和解决问题的过程中我们学会很多。
知道一个小小的错误会导致整个程序的功能就不同了。
在程序设计中我们必须考虑程序的直观性和全面性,还有可读性;让程序更容易让人看懂。
两周的课程设计结束了,在这次的课程设计中不仅检验了我所学习的知识,也培养了我如何去把握如何才能完成好一件事情。
在设计过程中,与同学分工设计,和同学们相互探讨,相互帮助,相互学习,相互监督。
设计从不同的方面考验着我们,不仅仅考验我们的知识,更重要的是考验我们的动手能力。
这件是要你说怎么做你会说,但是在真正的动手中你却有可能就不知道从何下手,所以在很多方面都要学习的。
课程设计培养了我们的动手能力,但它也不只是针对这一个方面,它涉及很多方面,能够全方面锻炼一个人。
参考文献
[1]黄同成,周红波.程序设计基础教程(C语言)[M].人民,2011.
[2]黄同成,黄磊.程序设计实践教程(C语言)[M].人民,2011.
[3]谭浩强.C程序设计(第三版)[M].:
清华大学,2005.
致
在这次课程设计的过程中,我得到了许多人的帮助。
首先我要感成老师在课程设计上给予我的指导、提供给我的支持和帮助,这是我能顺利完成这次报告的主要原因,更重要的是老师帮我解决了许多技术上的难题,让我能把系统做得更加完善。
在此期间,我不仅学到了许多新的知识,而且也开阔了视野,提高了自己的设计能力,找到了自己的不足,然后能不断的改正自己,让自己越来越进步。
还要感和我同一设计小组的几位同学,是你们在我平时设计中和我一起探讨问题,并指出我设计上的误区,教我要如何改正,使我能及时的发现问题,让我能顺利的完成程序,没有你们的帮助我不可能这样顺利地完成,所以在此表示感。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 课程设计 报告