c语言链表课程设计,单链表的基本操作C语言课程设计.doc

课程设计(论文)

题 目 名 称 单链表的基本操作

课 程 名 称 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系统模块流程图

N

Y

N

Y

N

Y

N

Y

N

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值