- 1、本文档共3页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Pascal语言单链表操作
Pascal语言单链表操作(第15周)
指针类型和结点类型的定义
type linklist ^node node record data:integer; next:linklist;
end;
基本操作
求单链表的长度
单链表的长度是指单链表中所含的结点的个数。从表头指针HL出发沿着每个结点的链,依次向下访问并进行计数,直到最后一个结点为止。
Proc Length HL
p←HL;
j←0;
while p ≠ nil do
j ← j+1;
p ← p^.next;
return j
从单链表中查找出其关键字,等于给定的k结点。
从表头第一个结点起,依次使每个结点的关键字同给定值k进行比较,直到某个结点的关键字等于给定值k(即查找成功)或者查到表尾(即查找失败)为止。
Proc locate HL,k
p←HL;
while p ≠ nil do
if p^.data k then
break else p←p^.next;
return p
在单链表中第i个结点之后插入一个元素为x的结点
为待插入的元素x分配一个结点(假定是由s指针变量所指向的结点,即s^结点),并把x赋值给s结点的值域。如果i为0,则将s结点插入表头后返回。从单链表中查找第i个结点;若查找成功,则在第i个结点后插入s结点,否则表明i值超出单链表的长度,应进行超出范围的错误提示处理。
Proc Insert HL, i, x
new s ;
s^.data ← x;
if i 0 then
s^.next ← HL;
HL ← s;
return
p ← HL;
j ← 1;
while p ≠ nil and j i do
j ← j + 1;
p ← p^.next;
if p ≠ nil then
s^.next ← p^.next;
p^.next ← s;
else
return ‘out of range’ ;
从单链表中删除其值等于给定值x的第一个结点。
如果单链表为空,则进行“下溢”处理;如果表头结点是被删除的结点,则删除该结点返返回。从第二个结点起,查找其值等于x的结点,直到查找结束(即查找成功或查找失败)为止;若查找成功,则删除被查找到的结点,否则进行“没有找到”的错误处理。
Proc Delete HL, x
if HL nil then return underflow
if HL^.data x then p ← HL;
HL ← HL^.next
dispose p ;
return
q ← HL;
p ← q^.next
while p ≠ nil do
if p^.data x then break
else
q ← p;
p ← p^.next;
if p ≠ nil then
q^.next ← p^.next;
dispose p
else
return not found
课堂练习
实现上述四个算法的代码。
如下图所示,采用动态结点存储双向链表。结点类型可定义为:
type tdlist node Prev Data Next node record
data:integer;
prev,next:tdlist;
end
设p和q分别是具有tdlist类型的指针变量,若要在链表中p所指向的结点之后插入一个q所指向的新结点。实现算法:
q^.next ← p^.next
q^.prev ← q
p^.next^.prev ← q
p^.next ← q
若要删除指针p所指向的结点,实现算法:
p^.prev^.next ← p^.next
p^.next.prev ← p^.prev
dispose p
实现双向链表的结点插入和删除的算法。
3.用动态结点实现。设有两个线性表LA和LB,对两个线性表从小到大排好序,然后将其合并成为一个线性表LC。合并的原则是:
(1)合并后的新表从小到大排序;
(2)LC中没有两个相同的元素。
文档评论(0)