计算机课程设计

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

可编辑

数据结构课程设计

题目小型图书馆管理系统

系(部) 电子与信息工程系

班级11级计算机科学与技术

姓名郭小龙

学号2011222240

指导教师付争方

2013年01月08日

电子与信息工程系

《数据结构》课程设计任务书

计算机教研室制

小型图书馆管理系统

郭小龙

安康学院计算机科学与技术11级陕西省安康市725000

摘要:本文采用单链表,通过对链表的技术的探究,利用C语言实现了从程序打开新建文件并写入内容,并进行插入、查找、删除、排序的功能,同时克服了C语言下数组长度的有限性。经实验验证,效果良好。

关键字:单链表;结构体;建立;指针;插入;查找;删除;排序。

1.引言

线性表是数据结构的一个基本内容。线性表的存储结构有顺序存储和链式存储结构,也就是我们常说的顺序表和链表。顺序和链式存储时线性表不同的存储方式,各有优劣,而不同的存储方式所对应的算法操作也不同,实现的效率也有差异。通过对两种存储方式进行对比分析,加深对链表的理解,本文分析了数据结构中链表的建立,插入,查找,删除,排序运算的实现并给出相应的程序。使人们对链表的优缺点有一个明确的认识。

2.链表的建立以及操作

2.1. 基本术语

(1)头节点

链表中的第一个节点,它没有存放有效地数据,只时使用了该节点的指针成员,指针成员指向了链表中的第一个有效节点的地址。

(2)首节点和尾节点

链表中的第一个存放有效数据的节点就是首节点,最后一个存放有效数据的节点。

(3)data域和next域

一个节点包括两个域,data域(数据域)用来存储节点的值,next 域(指针域)用来存放存储数据元素的直接后继的地址。

2.2. 链表

链表即用一组地址任意的存储单元存放线性表中的数据元素,以元素和指针表示一个节点,是一种链式的存取的结构,为找第i个数据元素则必须找到第i-1个数据元素,所以查找第i个数据元素的基本操作为:移动指针比较i和j。

2.3. 链表的建立和基本操作

链表的建立需要使用标准malloc(size)函数来为其申请一个长度为size字节的连续空间,

建立时有头插法和尾插法两种方法。基本操作包括链表的插入、查找、删除、排序。

3.链表的建立和操作的算法描述

3.1. 链表的建立

单链表的建立有头插法、尾插法两种方法。

(1)头插法

单链表是用户不断申请存储单元和改变链接关系而得到的一种特殊数据结构,将链表的左边称为链头,右边称为链尾。头插法建单链表是将链表右端看成固定的,链表不断向左延伸而得到的。头插法最先得到的是尾结点。由于链表的长度是随机的,故用一个while循环来控制链表中结点个数。假设每个结点的值都大于O,则循环条件为输入的值大于o。申请存储空间可使用malloc()函数实现,需设立一申请单元,但malloc()函数得到的指针并不是指向结构体的指针,需使用强制类型转换,将其转换成结构体型指针。刚开始时,链表还没建立,是一空链表,head指针为NULL。链表建立的过程是申请空间、得到数据、建立链接的循环处理过程。

(2)尾插法

若将链表的左端固定,链表不断向右延伸,这种建立链表的方法称为尾插法。尾插法建立链表时,头指针固定不动,故必须设立一个搜索指针,向链表右边延伸,则整个算法中应设立三个链表指针,即头指针head、搜索指针p2、申请单元指针pl。尾插法最先得到的是头节点。

3.2. 基本操作的算法(插入、查找、删除、排序)

3.2.1.插入

插入运算是将值为x的新结点插入到表的第i个结点的位置上,即插入到ai-1与ai之间。

(1)找到ai-1存储位置p

(2)生成一个数据域为x的新结点*s

(3)令结点*p的指针域指向新结点(4)新结点的指针域指向结点ai

3.2.2.查找(按值查找和按序号查找)

(1)按序号查找

设带头结点的单链表的长度为n,要查找表中第i个结点,则需要从单链表的头指针L出发,从头结点(H->next)开始顺着链表扫描,用指针p指向当前扫描到的结点,初值指向头结点,用j左计数器,累计当前扫描过的结点数(初值为0),当j=i时,指针所指结点就是要找的第i个结点。

(2)按值查找

按值查找是指在单链表中查找是否有结点值等于e的结点,若有的话,则返回首次找到的其值为e的结点的存储位置,否则返回NULL。查找过程从单链表的头指针指向的头结点出发,顺着链逐个将结点的值和给定值e作比较。

3.2.3.删除(按值删除和按序号删除)

(1)按序号删除

与在带头结点的单链表L中删除第i个结点,则首先要通过计数方式找到第i-1个结点并使p指向第i-1个结点,而后删除第i个结点并释放结点空间。

(2)按值删除

在链表中删除节点值等于e的节点,则首先要通过指针的向后移动比较每个节点data域值与e是否相等,相等的话则将前一个节点的next指向这个节点的后一个节点,释放删除节点的空间。

3.2.

4.排序

链表的排序可用很多的方法,比如选择排序和直接插入排序又或者冒泡排序。排序是需要用节点的data域,比较其值得大小。然后通过指针修改节点只链表中的位置。

4.结语

通过以上的探究,我们可以发现链表就像一条锁链一样,一环扣一环。在操作中它要不断的进行遍历,从一个节点跳到下一个节点,然后修改它前后节点的指针。并且在操作的节点距离首节点比较近的时候花费的时间是比较上的。但是距离比较远是则显示了它的不足之处,所以我们在对一组数据操作时选用正确的存储方式是非常重要的。

参考文献:

耿国华. 数据结构—用c语言描述[M] .北京:高等教育出版社,2005.

相关文档
最新文档