插入P之前(上图)begi
ewSSDataXQHead从头指针开始whileQNextP查找P的前趋结点QQQNextSNextPQNextS将新结点S插入P之前e
d四、删除运算删除P的后继结点R
begi
RPNextPNextRNextdisposeR
将结点R从链上摘下设放结点R
fe
d
【练习4】:完成下面的程序试写一算法实现在单链表中删除多余的、值相同的结点。在单链表上实现时,用指针P指向当前将变为无重复值的结点,指针R用来扫描P的后继结点,并且用指针Q始终指向R的前趋。当R的值和P的值相同时,删去R,即Q的后继,具体算法如下:procedurePURGE2varLpoi
t在不带头结点的单链表中删除多余的、值相同的结点varPQRpoi
tbegi
PLwhileP
ila
dPNext
ildobegi
P不空且P不是终端结点QPRPNext从P的后继开始扫描whileR
ildoIfPDataRDatathe
begi
QNextRNextdisposeR删去结点RR指向被删结点的后继e
delsebegi
RRNexte
de
de
d继续扫描
练习参考答案:练习1:SdatachS
exthead练习2:SdataChHeadS练习3:S
extP
extP
extS练习4:RQ
extQR
fHeadS
R
extSRS
§232
循环链表CircularLi
kedList
是有一种首尾相接的链表。其特点是无需增加存储量,仅对表的链接方式稍作改变,即可使得表处理更加灵活。(1)单循环链表:在单链表中,将终端结点指针域
il改为指向表头结点或开始结点,就得到了单链表形式的循环链表:
(2)双链表DoubleLi
kedList:可以在单链表的每一个结点里再增加一个指向其前趋的指针域Prior。这样链表中有两条不同方向的链。结构定义:typepoi
tDNodeD
oderecordDatarealPriorNextpoi
te
d
在带头结点的双链表中,将值为X的新结点插入P之前:
ewSSDataXSPriorPPriorSNextPPPriorNextSPPriorS删除双链表结点P:
fPPriorNextPNextPNextPriorPPriordisposeP【综合练习】1.约瑟夫问题(ysfpas)
个人围成一个圆圈,首先第k个人从1开始一个人一个人顺时针报数报到第m个人,令其出列。然后再从下一个人开始,从1顺时针报数,报到第m个人,再令其出列,,如此
下去直到圆圈中只剩一个人为止。此人即为优胜者。输入:
、m、k输出:优胜者的序号2.多项式相加、减、乘(dxspas)编程进行多项式的加、减、乘的运算。输入:(从文件dxsi
读取)第一行:c(c为字符:’’、’‘或’‘),表示所要进行的操作第二行:(多项式A)最高项的系r