单链表的基本操作 C语言课程设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
课程设计(论文)
题目名称单链表的基本操作
课程名称C语言程序课程设计
学生姓名
学号
系、专业信息工程系、网络工程专业
指导教师成娅辉
2013年6月6 日
目录
1 前言 (3)
2 需求分析 (3)
2.1 课程设计目的 (3)
2.2 课程设计任务 (3)
2.3 设计环境 (3)
2.4 开发语言 (3)
3 分析和设计 (3)
3.1 模块设计 (3)
3.2 系统流程图 (4)
3.3 主要模块的流程图 (6)
4 具体代码实现 (9)
5 课程设计总结 (12)
5.1 程序运行结果 (12)
5.2 课程设计体会 (12)
参考文献 (13)
致谢 (13)
1 前言
我们这学期学习了开关语句,循环语句、链表、函数体、指针等的应用,我们在完成课程设计任务时就主要用到这些知识点,本课题是单链表的简单操作,定义四个子函数分别用来创建链表、输出链表、插入数据以及删除数据,主函数中主要用到开关语句来进行选择调用哪个子函数,下面就是课程设计的主要内容。
2 需求分析
2.1 课程设计目的
学生在教师指导下运用所学课程的知识来研究、解决一些具有一定综合性问题的专业课题。通过课程设计(论文),提高学生综合运用所学知识来解决实际问题、使用文献资料、及进行科学实验或技术设计的初步能力,为毕业设计(论文)打基础。
2.2 课程设计任务
输入一组正整数,以-1标志结束,用函数实现:(1)将这些正整数作为链表结点的data域建立一个非递减有序的单链表,并输出该单链表;(2)往该链表中插入一个正整数,使其仍保持非递减有序,输出插入操作后的单链表;(3)删除链表中第i个结点,输出删除操作后的单链表,i从键盘输入。
2.3 设计环境
(1)WINDOWS 7系统
(2)Visual C++
2.4 开发语言
C语言
3 分析和设计
3.1 模块设计
定义链表结点类型struct node表示结点中的信息,信息包括数据域data(用于存放结点中的有用数据)以及指针域next(用于存放下一个结点的地址),并将链表结点类型名改为NODE。如下所示:
typedef struct node
{int data;
struct node *next;
}NODE;
定义函数NODE *create_llist_sorted(),用来创建非递减有序带头结点的单链表,定义四个指针NODE*h,*p,*q,*s,头指针指向第一个结点,并且分配空间给头指针h,使头指针不为空,*p指向单链表中某一结点,*q指向*p的前驱,*s指向输入的数据,将数据逐个输入,将输入的数据通过循环语句不断进行比较,其中先使*q指向*h所指位置,*p指向*h的下一个位置,不断将输入的每一个数据与链表中的数据相比较,找到插入位置,然后移动*p,*q,直到*p为空指针且*s所指数据小于等于*p所指数据,从而使数据有序,最后返回头指针。详细程序见后文中的具体代码实现。
定义函数void output(),用来输出头指针h所指的单链表,因为此链表有头结点,所以定义一个指针NODE *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,用指针p来从第一个结点开始查找需要删除的结点,指针q是指针p的前驱,查找过程中,不断移动指针p,q,直至找到需要删除的结点,如果*p为空指针,则表示链表中没有需要删除的结点,最后返回头指针。详细程序见后文中的具体代码实现。
主函数主要是采用开关分支语句对几个子函数进行调用。
3.2系统模块流程图
图3.1系统模块流程图
3.3主要模块的流程图
(1)输出函数流程图(如图3.2)
图3.2. 输出函数流程图(2)插入函数流程图(如图3.3)
图3.3插入函数流程图
(3)删除函数流程图(如图3.4)
图3.4删除函数流程图
(4)创建单链表函数流程图(如图3.5)
图3.5创建单链表函数流程图
4 具体代码实现
/*单链表的基本操作*/
#include"stdio.h"
#include"math.h"
#include"string.h"
#include"stdlib.h"
typedef struct node
{int data;
struct node *next;
}NODE;/*链表结点类型定义*/
/********函数声明********/
NODE *create_llist_sorted();
/*建立一个非递减有序的带头结点的单链表,返回其头指针*/
void output(NODE *h);/*输出头指针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)
{case 1:head=create_llist_sorted();break;
case 2:output(head);break;