- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第2章 线性表
本章主要介绍下列内容
1. 线性表的定义和基本操作
2. 线性表的顺序存储结构
3. 线性表的链式存储结构
4. 循环链表、线性表的应用举例
课时分配:第1、2节两个学时,第3、4节各两个学时,上机两个学时
重点、难点:线性表的存储结构、链式存储结构、循环链表
第一节 线性表的定义和基本操作
1.线性表的定义
线性表是由n(n≥0)个类型相同的数据元素组成的有限序列。通常表示成下列形式:
L=( a1, a2,...,ai-1,ai,ai+1,...,an)
其中:L为线性表名称,习惯用大写书写;
ai为组成该线性表的数据元素,习惯用小写书写;
线性表中数据元素的个数被称为线性表的长度,当n=0时,线性表为空,称为空线性表。
举例
La=(34,89,765,12,90,-34,22) 数据元素类型为int。
Ls=(2Hello2,2World2, 2China2, 2Welcome2) 数据元素类型为string。
Lb=(book1,book2,...,book100) 数据元素类型为下列所示的结构类型:
struct bookinfo{
int No; //图书编号数据项
char *name; //图书名称数据项
char *author; //作者名称数据项
...;
}
2.线性表的基本操作(略介绍)
(1)初始化线性表L InitList(L)
(2)销毁线性表L DestoryList(L)
(3)清空线性表L ClearList(L)
(4)求线性表L的长度 ListLength(L)
(5)判断线性表L是否为空 IsEmpty(L)
(6)获取线性表L中的某个数据元素内容 GetElem(L,i,e)
(7)检索值为e的数据元素 LocateELem(L,e)
(8)返回线性表L中e的直接前驱元素 PriorElem(L,e)
(9)返回线性表L中e的直接后继元素 NextElem(L,e)
(10)在线性表L中插入一个数据元素 ListInsert(L,i,e)
(11)删除线性表L中第i个数据元素 ListDelete(L,i,e)
3.以例2-1和例2-2说明以上基本操作在算法设计中的作用
第二节 线性表的顺序存储结构
1.线性表的顺序存储结构
线性表的顺序存储结构是指用一组连续的存储单元依次存储线性表中的每个数据元素。如下图所示:
其中,L为每个数据元素所占据的存储单元数目。
相邻两个数据元素的存储位置计算公式为:
LOC(ai+1)=LOC(ai)+L
线性表中任意一个数据元素的存储位置的计算公式为:
LOC(ai+1)=LOC(a1)+(i-1)*L
2.顺序存储结构的特点
(1)利用数据元素的存储位置表示线性表中相邻数据元素之间的前后关系,即线性表的逻辑结构与存储结构(物理结构)一致;
(2)在访问线性表时,可以利用上述给出的数学公式,快速地计算出任何一个数据元素的存储地址。因此,我们可以粗略地认为,访问每个数据元素所花费的时间相等。这种存取元素的方法被称为随机存取法,使用这种存取方法的存储结构被称为随机存储结构。
3.在C语言中,实现线性表的顺序存储结构的类型定义
#define LIST_MAX_LENGTH 100 //线性表的最大长度
typedef struct {
Elemtype *elem; //指向存放线性表中数据元素的基地址
int length; //线性表的当前长度
} SEQLIST;
或
typedef struct {
Elemtype elem[LIST_MAX_LENGTH]; //直接存放线性表中数据元素
int length; //线性表的当前长度
} SEQLIST;
4.典型操作的算法实现
(1)初始化线性表L
int InitList(SEQLIST *L)
{
L-elem=(Elemtype*)malloc(LIST_MAX_LENGTH *sizeof(Elemtype)); //分配空间
if (L-elem==NULL) return ERROR; //若分配空间不成功,返回ERROR
L-length=0; //将当前线性表长度置0
return OK; //成功返回OK
}
(2)销毁线性表L
void DestroyList(SEQLIST *L)
{
if (L-elem) free(L-elem); //释放线性表占据的所有存储空间
}
(3)清空线性表L
void ClearList(SEQLIST *L)
{
L-length=0; //将线性表的长度置为0
}
(4)求线性表L的长度
int GetLength(SEQLIST L)
{
return (L.length);
文档评论(0)