- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第二章 线性表
线性结构特点:
唯一头元素
唯一尾元素
除头元素外,均有一个直接前驱
除尾元素外,均有一个直接后继书目信息、排队、算术表达式。
线性表的定义
线性表的语言定义
线性表是 n 个数据元素的有限序列。例,英文字母表 (A,B,C,……,Z)
线性表中的数据元素也可以由若干个数据项构成。 例,包含大量记录的登记表
线性表的形式定义
线性表可以表示为 n 个数据元素的有限序列:
(a ,…,a ,a ,…,a )
1 i-1 i n
aaa其中 是头元素,
a
a
a
1 n
是尾元素,
aai
a
a
是第 i 个元素。
aai-1
a
是 的直接前驱,
i i
是
i-1
的直接后继。
抽象数据类型 线性表 List 的定义:
ADT List {
i数据对象: D = { a | a
i
i
∈ElemSet,i = 1, 2, …, n }
数据关系: R1 = { a
, a }
基本操作: InitList( L )
i-1 i
姓名学号性别年龄班级王晓林790631
姓名
学号
性别
年龄
班级
王晓林
790631
男
25
计 90
陈红
790632
女
24
计 90
条件: 线性表 L 已存在。
…
} ADT List
其它基本操作包括:
ClearList( L ) ListEmpty ( L ) ListLength ( L )
GetElem ( L,i,e )
LocateElem ( L,e,compare() ) PriorElem ( L,cur_e,pre_e ) NextElem ( L,cur_e,next_e ) ListInsert ( L,i,e )
ListDelete ( L,i,e ) ListTraverse ( L,visit() )
线性表的顺序表示和实现
线性表的顺序表示指的是用一组地址连续的存储单元依次存储线性表的数 据元素。
线性表顺序存储结构表示
# define LIST_INIT_SIZE 100
# define LISTINCREMENT 10
typedef struct {
Elemtype * elem; //数据元素
int length; // 表长,初始为 0
int listsize; // 表存储容量
} SqList;
Status InitList_Sq ( SqList L ) { //初始化空线性表
L.elem = ( ElemType * ) malloc
( LIST_INIT_SIZE * sizeof(ElemType) );
if ( ! L.elem ) exit(OVERFLOW) ; L.length = 0 ;
L.listsize = LIST_INIT_SIZE ; return OK ;
}
线性表的顺序存储结构的优点
可随机存取表中任意数据元素(第 i 个)
L.elem[i-1]
* (L.elem+i-1)
直接可获取线性表的长度
L.length
算法 2.4 在第 i 个数据元素之前插入一个新的元素例,在第 i 个元素前插入 b
思想:
找到第 i 个元素的位置。
将第 n 到 i 个元素均向后移动一个位置。
将新元素放置在第 i 个位置。
int ListInsert_Sq ( Sqlist L ,int i ,ElemType e ) {
ElemType *p, *q;
q = L.elem[i-1] ; //找到第 i 个元素位置
for ( p = L.elem[L.length-1] ;p = q ;p -- )
* (p+1) = * p ; // 后移元素
* q = e ; // 插入新元素
++L.length ;
return 0;
}
int ListDelete_Sq ( Sqlist L ,int i ,ElemType e ) { if ( i 1 || i L.length ) return 1 ;
p = L.elem[i-1] ; // 找到第 i 个元素
e = * p ; // 取第 i 个元素的值
for ( p++ ;p = L.elem[ L.length - 1];p ++ )
* (p - 1) = * p ; // 前移
-- L.length; return 0 ;
}
线性表的链式表示和实现
线性表的链式存储结构的特点是用一组随意的存储单元存储线性表的数据元 素。
例,线性表数据为{3,5,7}
结点: 两部分信息组成,存储数据元素信息的数据域,存储直接后继存储位置信息的指针域。
线性表的单链表存储结构typedef struct LNode { ElemType
您可能关注的文档
最近下载
- 蒂森MC2详细说明.pdf VIP
- 公交公司安全工作总结.docx VIP
- 打点计时器试卷习题精选附答案(出试卷可选用) .doc VIP
- (正式版)SH∕T 3006-2024 石油化工控制室设计规范.pdf VIP
- (完整版)打点计时器试卷习题附答案(出试卷可选用).docx VIP
- 国家开放大学——政治学原理——章七 自检自测—2022春季作业—2021秋季班.doc VIP
- 在线网课学习课堂《社会研究方法( 华科)》单元测试考核答案.docx VIP
- 蒂升电梯调试资料MC2B门机BG211-BG211C.pdf VIP
- 提高卧床患者踝泵运动的执行率.pptx VIP
- 蒂森MC2-B系统调试手册.pdf VIP
原创力文档


文档评论(0)