- 1、本文档共31页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
《2.2_链式存储的线性表OK》.pdf
2.2.1 线性表的逻辑结构线性表的逻辑结构
22.22.22 顺序存储线性表顺序存储线性表
2.2.3 链式存储线性表(线性链表)
2.2.4 线性表的应用
——一元多项式的相加
2222..2222..3333 链式存储线性表链式存储线性表链式存储线性表链式存储线性表
11. 线性表的链式存储线性表的链式存储
——用用一组任意的存储单元任意的存储单元 (连续的或连续的或不连续的连续的)
来依次存放线性表的数据元素。
元素间的逻辑关系需要依靠“指针”指明,即
通过每个节点的指针域将线性表的n个结点按逻辑次
序链在一起。
序链在 起。
每个结点由两个域组成每个结点由两个域组成::数据域和指针域数据域和指针域。
设指针设指针p指向某指向某一结点结点,有有
pp datadata nextnext
其中其中 data(p)(p)——pp所指向结点的数据域内容所指向结点的数据域内容
(即存放该结点本身的数据)
next(p) p所指向结点的指针域内容
next(p)——p所指向结点的指针域内容
(即存放该结点的下一结点地址)
结点定义(C语言描述)
typedef struct node
{
chhar ddatta;
structstruct nodenode *next;next;
}LISTNODE
结点的动态生成GETNODE(P) (C语言实现)
int GETNODE(LISTNODE *P)
{ P = (LISTNODE *)malloc (sizeof(LISTNODE));
if(!P)if(!P) retturn(0)(0);
elseelse return(1);return(1);
}
回收结点RET(P)
C语言中实现:free(P);
单链表单链表
单循环链表单循环链表
双向链表
双向循环链表
单链表单链表——结点包含一个指针结点包含一个指针,指明直接后继元素指明直接后继元素
head (头指针,存放链表的第一个结点的地址)
a1 a2 … an Λ
p ((表中最后表中最后一个结点指针为个结点指针为
空,表示链表到此结束)
head Λ (空表)
特点:只能在一个方向上查找其后的元素。
例:在上图的单链表中,指针p指向值为a 的结点。2
data(head)=data(head)= ;; next(head)=next(head)= ;; data(next(head))=data(next(head))= 。
例例::在非空链表中查找元素在非空链表中查找元素aa之前的结点之前的结点qq ((按值查找按值查找))
LOOKFOR (head, a, q) //寻找元素a之前的结点指针q
1 q← head;
22 while((next(q)!while((next(q)!=nil)nil) andand (data(next(q))!(data(next(q))!=a)a) dodo
3 q←next (q); //如果表中无a结点,则q指向链表最后一个结点
44 retturn
单链表的插入单链表的插入
例例::在链表中值为在链表中值为a的结点前插入值为的结点前插入值为b的结点的结点.
b p
②②
文档评论(0)