第2章 线性表习题与解析
数据结构习题及答案 (2)

第二章线性表一、选择题1.一个线性表第一个元素的存储地址是100,每个元素的长度为2,则第5个元素的地址是( )(A)110 (B)108(C)100 (D)120参考答案:B2. 向一个有127个元素的顺序表中插入一个新元素并保持原来顺序不变,平均要移动()个元素。
(A)64(B)63 (C)63.5 (D)7参考答案:C3.线性表采用链式存储结构时,其地址()。
(A) 必须是连续的 (B) 部分地址必须是连续的(C) 一定是不连续的 (D) 连续与否均可以参考答案:D4. 在一个单链表中,若p所指结点不是最后结点,在p之后插入s所指结点,则执行()(A)s->next=p;p->next=s; (B) s->next=p->next;p->next=s;(C)s->next=p->next;p=s; (D)p->next=s;s->next=p;参考答案:B5.在一个单链表中,若删除p所指结点的后续结点,则执行()(A)p->next=p->next->next; (B)p=p->next; p->next=p->next->next;(C)p->next=p->next; (D)p =p->next->next;参考答案:A6.下列有关线性表的叙述中,正确的是()(A)线性表中的元素之间隔是线性关系(B)线性表中至少有一个元素(C)线性表中任何一个元素有且仅有一个直接前趋(D)线性表中任何一个元素有且仅有一个直接后继参考答案:A7.线性表是具有n个()的有限序列(n≠0)(A)表元素(B)字符(C)数据元素(D)数据项参考答案:C二、判断题1.线性表的链接存储,表中元素的逻辑顺序与物理顺序一定相同。
()2.如果没有提供指针类型的语言,就无法构造链式结构。
()3.线性结构的特点是只有一个结点没有前驱,只有一个结点没有后继,其余的结点只有一个前驱和后继。
第二章线性表习题及答案

第二章线性表习题及答案一、基础知识题2.1 试描述头指针、头结点、开始结点的区别、并说明头指针和头结点的作用。
答:始结点是指链表中的第一个结点,也就是没有直接前趋的那个结点。
链表的头指针是一指向链表开始结点的指针(没有头结点时),单链表由头指针唯一确定,因此单链表可以用头指针的名字来命名。
头结点是我们人为地在链表的开始结点之前附加的一个结点。
有了头结点之后,头指针指向头结点,不论链表否为空,头指针总是非空。
而且头指针的设置使得对链表的第一个位置上的操作与在表其他位置上的操作一致(都是在某一结点之后)。
2.2 何时选用顺序表、何时选用链表作为线性表的存储结构为宜?答:在实际应用中,应根据具体问题的要求和性质来选择顺序表或链表作为线性表的存储结构,通常有以下几方面的考虑:1.基于空间的考虑。
当要求存储的线性表长度变化不大,易于事先确定其大小时,为了节约存储空间,宜采用顺序表;反之,当线性表长度变化大,难以估计其存储规模时,采用动态链表作为存储结构为好。
2.基于时间的考虑。
若线性表的操作主要是进行查找,很少做插入和删除操作时,采用顺序表做存储结构为宜;反之,若需要对线性表进行频繁地插入或删除等的操作时,宜采用链表做存储结构。
并且,若链表的插入和删除主要发生在表的首尾两端,则采用尾指针表示的单循环链表为宜。
2.3 在顺序表中插入和删除一个结点需平均移动多少个结点?具体的移动次数取决于哪两个因素?答:在等概率情况下,顺序表中插入一个结点需平均移动n/2个结点。
删除一个结点需平均移动(n-1)/2个结点。
具体的移动次数取决于顺序表的长度n以及需插入或删除的位置i。
i 越接近n则所需移动的结点数越少。
2.4 为什么在单循环链表中设置尾指针比设置头指针更好?答:尾指针是指向终端结点的指针,用它来表示单循环链表可以使得查找链表的开始结点和终端结点都很方便,设一带头结点的单循环链表,其尾指针为rear,则开始结点和终端结点的位置分别是rear->next->next 和rear, 查找时间都是O(1)。
第2章线性表习题解析(答)

第二章线性表练习题一、选择题1.线性表是具有n个的有限序列。
A、表元素B、字符C、数据元素D、数据项E、信息项2.线性表的静态链表存储结构与顺序存储结构相比优点是。
A、所有的操作算法实现简单B、便于随机存储C、便于插入和删除D、便于利用零散的存储器空间3.若长度为n的线性表采用顺序存储结构,在其第i个位置插入一个新元素算法的时间复杂度为。
A、O(log2n)B、O(1)C、O(n)D、O(n2)4.(1)静态链表既有顺序存储的特点,又有动态链表的优点。
所以,它存取表中第i个元素的时间与i无关;(2)静态链表中能容纳元素个数的最大数在定义时就确定了,以后不能增加;(3)静态链表与动态链表在元素的插入、删除上类似,不需做元素的移动。
以上错误的是。
A、(1)、(2)B、(1)C、(1)、(2)、(3)D、(2)6.在双向链表存储结构中,删除p所指的结点时须修改指针。
A、p->next->prior=p->prior; p->prior->next=p->next;B、p->next=p->next->next;p->next->prior=p;C、p->prior->next=p;p->prior=p->prior->prior;D、p->prior=p->next->next;p->next=p->prior->prior;7.在双向循环链表中,在P指针所指的结点后插入q所指向的新结点,其修改指针的操作是。
A、p->next=q; q->prior=p;p->next->prior=q;q->next=q;B、p->next=q;p->next->prior=q;q->prior=p;q->next=p->next;C、q->prior=p; q->next=p->next; p->next->prior=q; p->next=q;D、q->next=p->next;q->prior=p;p->next=q;p->next=q;8.将两个各有n个元素的有序表归并成一个有序表,其最少的比较次数是。
数据结构课后习题答案第二章 线性表

第二章线性表2.1描述以下三个概念的区别:头指针,头结点,首元结点(第一个元素结点)。
并说明头指针和头结点的作用。
答:头指针是一个指针变量,里面存放的是链表中首结点的地址,并以此来标识一个链表。
如链表H,链表L等,表示链表中第一个结点的地址存放在H、L中。
头结点是附加在第一个元素结点之前的一个结点,头指针指向头结点。
当该链表表示一个非空的线性表时,头结点的指针域指向第一个元素结点,为空表时,该指针域为空。
开始结点指第一个元素结点。
头指针的作用是用来惟一标识一个单链表。
头结点的作用有两个:一是使得对空表和非空表的处理得以统一。
二是使得在链表的第一个位置上的操作和在其他位置上的操作一致,无需特殊处理。
2.2填空题1、在顺序表中插入或删除一个元素,需要平均移动(表中一半)元素,具体移动的元素个数与(表长和该元素在表中的位置)有关。
2、顺序表中逻辑上相邻的元素的物理位置(必定)相邻。
单链表中逻辑上相邻的元素的物理位置(不一定)相邻。
3、在单链表中,除了首元结点外,任一结点的存储位置由(其直接前驱结点的链域的值)指示。
4、在单链表中设置头结点的作用是(插入和删除元素不必进行特殊处理)。
2.3何时选用顺序表、何时选用链表作为线性表的存储结构为宜?答:在实际应用中,应根据具体问题的要求和性质来选择顺序表或链表作为线性表的存储结构,通常有以下几方面的考虑:1.基于空间的考虑。
当要求存储的线性表长度变化不大,易于事先确定其大小时,为了节约存储空间,宜采用顺序表;反之,当线性表长度变化大,难以估计其存储规模时,采用动态链表作为存储结构为好。
2.基于时间的考虑。
若线性表的操作主要是进行查找,很少做插入和删除操作时,采用顺序表做存储结构为宜;反之,若需要对线性表进行频繁地插入或删除等的操作时,宜采用链表做存储结构。
并且,若链表的插入和删除主要发生在表的首尾两端,则采用尾指针表示的单循环链表为宜。
2.10 Status DeleteK(SqList &a,int i,int k)//删除线性表a中第i个元素起的k个元素{if(i<1||k<0||i+k-1>a.length) return INFEASIBLE;for(count=1;i+count-1<=a.length-k;count++) //注意循环结束的条件a.elem[i+count-1]=a.elem[i+count+k-1];a.length-=k;return OK;}//DeleteK2.11设顺序表中的数据元素递增有序,试写一算法,将X插入到顺序表的适当位置上,以保持该表的有序性。
数据结构第二章 线性表练习及答案

一、选择题1、用单链表方式存储的线性表,存储每个结点需要两个域,一个是数据域,另一个是()A、当前结点所在的地址域B、指针域C、空指针域D、空闲域2、不带头结点的单链表head为空的判断条件是()A、head==NULLB、head->next==NULLC、head->data==NULLD、head!=NULL3、在一个单链表中,已知q所指结点是p所指结点的前驱结点,若在p和q之间插入s结点,则执行()A、s->next=p; q->next=s;B、p->next=s->next; s->next=p;C、q->next=s->next; s->next=p;D、p->next=s; s->next=q;4、在一个具有n个结点的有序单链表中插入一个新结点并仍然有序的时间复杂度是()A、O(1)B、O(n)C、O(n2)D、O(nlog2n)5、一个单链表中,若删除p所指结点的后续结点,则执行()A、p->next=p->next->next;B、p=p->next; p->next=p->next->next;C、p->next=p;D、p=p->next->next;6、已知一个顺序存储的基本线性表,设每个结点需占m个存储单元,若第一个结点的地址为d1,则第i个结点的地址为()A、d1+(i-1)*mB、d1+i*mC、d1-i*mD、d1+(i+1)*m7、在n个结点的顺序表中,算法的时间复杂度是O(1)的操作是()A、访问第i个结点(1<=i<=n)和求第i个结点的直接前驱(2<=i<=n)B、在第i个结点后插入一个新结点(1<=i<=n)C、删除第i个结点(1<=i<=n)D、将n个结点从小到大排序8、下面给出的算法段是要把一个q所指新结点作为非空双向链表中的p所指结点的前驱结点插入到该双向链表中,能正确完成要求的算法段是()A、q->next=p; q->prior=p->prior; p->prior=q; p->prior->next=q;B、p->prior=q; q->next=p; p->prior->next=q; q->prior=p->prior;C、q->prior=p->prior; q->next=p; p->prior->next=q; p->prior=q;D、以上都不对9、在循环双链表的p所指结点之后插入s所指结点的操作是()A、p->next=s; s->prior=p; p->next->prior=s; s->next=p->next;B、p->next=s; p->next->prior=s; s->prior=p; s->next=p->next;C、s->prior=p; s->next=p->next; p->next=s; p->next->prior=s;D、s->prior=p; p->next->prior=s; s->next=p->next; p->next=s;10、从具有n个结点的单链表中查找其值等于x结点时,在查找成功的情况下,需平均比较()个结点。
DS02线性表习题参考解答

第2章线性表习题参考解答一、简答题1.试描述头指针、头结点、开始结点的区别、并说明头指针和头结点的作用。
【答】头指针:是指向链表中的第一个结点的指针。
头结点:在开始结点之前附加上的一个结点。
开始结点:链表的第一个结点。
头指针是一个指向地址的变量,用于表示一个链表的开始。
引入头结点可以更加方便的进行链表是否为空的判断,同时方便了插入和删除结点。
开始结点用于存储链表的第一个数据元素。
2.何时选用顺序表、何时选用链表作为线性表的存储结构为宜?【答】顺序表中查找元素、获取表长非常容易,但是,要插入或者删除一个元素却需要移动大量的元素;相反,链表中却是方便插入或者删除元素,在查找元素的是,需要进行遍历。
因此,当所涉及的问题常常进行查找等操作,而插入、删除相对较少的是,适合采用顺序表;当常常需要插入、删除的时候,适合采用链表。
3.为什么在单循环链表中设置尾指针比设置头指针更好?【答】在单循环链表中,设置尾指针,可以更方便的判断链表是否为空。
4.在单链表、双链表和单循环链表中,若仅知道指针p指向某结点,不知道头指针,能否将结点*p从相应的链表中删去?【答】本题分三种情况讨论:1、单链表:当知道指针p指向某结点时,能够根据该指针找到其直接后继,但是不知道头指针,因此不能找到该结点的直接前趋,因此,无法删除该结点。
2、双链表:根据指针p可以找到该结点的直接前趋和直接后继,因此,能够删除该结点。
3、单循环链表:和双链表类似,根据指针p也可以找到该结点的直接前趋和直接后继,因此,也可以删除该结点。
5.下述算法的功能是什么?LinkList Demo(LinkList *L) /* L是无头结点单链表*/{LNode *Q,*P;if(L&&L->next){Q=L;L=L->next;P=L;while (P->next) P=P->next;P->next=Q; Q->next=NULL;}return L;} /* Demo */【答】将原来的第一个结点变成末尾结点,原来的第二个结点变成链表的第一个结点。
《数据结构》吕云翔编著第2章线性表习题解答

数据结构第二章习题解答一、单选题1.在一个长度为n的顺序存储线性表中,向第i个元素(1≤i≤n+1)之前插入一个新元素时,需要从后向前依次后移(B)个元素。
A、n-iB、n-i+1C、n-i-1D、i2.在一个长度为n的顺序存储线性表中,删除第i个元素(1≤i≤n+1)时,需要从前向后依次前移(A)个元素。
A、n-iB、n-i+1C、n-i-1D、i3. 在一个长度为n的线性表中顺序查找值为x的元素时,在等概率情况下,查找成功时的平均查找长度(即需要比较的元素个数)为( C )。
A. nB. n/2C. (n+1)/2D. (n-1)/24.在一个长度为n的线性表中,删除值为x的元素时需要比较元素和移动元素的总次数为(C )。
A. (n+1)/2B. n/2C. nD. n+15. 在一个顺序表的表尾插入一个元素的时间复杂度为(B )。
A. O(n)B. O(1)C. O(n*n)D. O(log2n)6.若一个结点的引用为p,它的前驱结点的引用为q,则删除p的后继结点的操作为(B )。
A. p=p.next.nextB. p.next=p.next.nextC. q.next=p.nextD. q.next=q.next.next8. 假定一个多项式中x的最高次幂为n,则在保存所有系数项的线性表表示中,其线性表长度为(A )。
A. n+1B. nC. n-1D. n+2二、填空题1.对于当前长度为n的线性表,共包含有________多个插入元素的位置,共包含有________多个删除元素的位置。
(答案n+1 n)2.若经常需要对线性表进行表尾插入和删除运算,则最好采用________存储结构,若经常需要对线性表进行表头插入和删除运算,则最好采用________存储结构。
(答案:顺序链式)3.由n个元素生成一个顺序表,若每次都调用插入算法把一个元素插入到表头,则整个算法的时间复杂度为________,若每次都调用插入算法把一个元素插入到表尾,则整个算法的时间复杂度为________。
第2章线性表习题参考答案

1.D
2.B
3.B
4.B
5.B
6.B
7.D
8.B
9.C
10.B
11.C
12.C
13.B
14.D
15.A
16.B
17.B
18.C
19.A
20.C
21.D
22.A
23.A
24.A
二、填空题
1.首元素其直接前驱结点的链域的值
2.HL→next =NULL;HL=HL→next
3.有限、一对一
4.O(1)随机存取
若用头指针来表示该链表,则查找终端结点的时间为O(n)。
五、编程题
1.解答:由于在单链表中只给出一个头指针,所以只能用遍历的方法来数单链表中的结点个数了。算法如下:
int ListLength ( LinkList L )
{
int len=0 ;
ListNode *p;
p=L; //设该表有头结点
while ( p->next )
int i;
for (i=0;i<=L->length/2;i++)//L->length/2为整除运算
{temp = L->data[i]; //交换数据
L -> data[ i ] = L -> data[ L -> length-1-i];
L -> data[ L -> length - 1 - i ] = temp;
p=p->next;
}
return min;
}
3.int searchmax(linklist l)
{int max;
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
【解析】画出链表L的结构图如图2-3所示。
【解析】根据双循环链表的两个最重要的特点:
1)所有结点都有前驱指针和后继指针;
2)尾结点的后继指针指向第一个结点。
可以写出满足要求的语句
P->next=L;
【5】带头结点的双循环链表L为空表的条件是。
【解析】如图2- 所示,当带头结点的双循环链表的头结点L的前驱和后继指针都志向自己时,链表为空。
图2-
(5)能够从时间和空间复杂度的角度综合比较线性表两种存储结构的不同特点及其适用场合。
2.2习题解析
一判断题(y/n)
1,顺序存储的线性表可以随机存取。
2,顺序存储的线性表的插入和删除操作不需要付出很大的代价,因为平均每次操作只有近一半的元素需要移动。
3,由于顺序存储要求连续的存储区域,所以在存储管理上不够灵活。
或者S->prior->next=S。
【3】在单链表中,删除指针P所指结点的后继结点的语句是。
【解析】根据单链表的存储特点,即每个结点包括数据域和后继结点指针域两个部分,可以容易地写出语句:
P->next=P->next->next;
为本题答案。
【4】在双循环链表L中,指针P所指结点为尾结点的条件是。
【解析】线性表长度的定义是它所包含的元素的个数。元素的类型决定了元素所占用存储空间的大小,但元素的个数不等价于元素的类型。因此本题答案为×。
【3】双循环链表中。任意一个结点的后继指针均指向其逻辑后继。
【解析】在双链表中,所有结点的后继指针指向的均为其逻辑后继。但对于双循环链表就有了一个特殊值——最后一个结点,它的后继指针指向的是链表中的第一个结点。因此,本题的答案为×。
写成语句是:
L->prior=L->next;
或
L->next=L;
或
L->prior=L;
【6】在带头结点L的双循环链表中,最后一个结点的指针是。
【解析】如图2- 所示,带头结点的双循环链表中,最后一个结点的地址记录在
图2-
头结点L的前驱指针域中。因此,本题的答案是L->prior。
【7】在只有尾指针R的单循环链表中,在表尾插入一个结点S(S为指向该结点的指针)的语句序列是。
【解析】本题考察对链表结构的基本特点的掌握。链表是一种线性表,它具有线性表的特点,所需空间与元素个数成正比。同时,它的每个元素由数据和指针两个域组成,因此,对元素的插入和删除操作只需修改指针即可。所以,(B)、(C)、(D)是正确的,而(A)不是链表的特点。
【2】如果一个链表中最常用的操作是在最后一个结点之后插入一个结点和删除最后一个结点,则采用存储方式最节省运算时间。
S->prior=P.prior; //
P->prior=S; //
=S;
【解析】题目中的三条语句的效果如图2-2所示:
图2-2
第四条语句该处理P的前驱结点T的后继next指针的指向,因此应当是
P->prior->prior->next=S(注意:不能写成P->prior ->next=S!为什么?因为P-prior已经发生了变化,原来是指向T,而现在指向S)
图2-
2.2.3填空题
【1】在带有头结点H的单链表中,第一个元素结点的指针是。
【解析】带头结点的单链表中,第一个元素结点的指针存放在头结点H的指针域中,如图2-1所示:
因此答案为:H->next。
【2】在双循环链表中,在指针P所指结点前插入指针S所指的结点,需执行下列语句:
S->next=P; //
2.2.2判断题
判断下列叙述是否正确,正确的打√,错误的打×。
【1】在顺序表中取出第i个元素所花费的时间与i成正比。
【解析】在顺序表中,元素的物理位置是由它们的编号决定的。因此,可根据编号(下标)来随机查找任一元素,查找所花费的时间与编号无关。本题答案为×。
【2】线性表的长度是指线性表所占用的存储空间的大小。
【6】如果一个线性表最常用的操作是在最后一个元素后面插入一个元素和删除第一个元素,则采用存储方式最节省运算时间。
(A)单链表(B)双链表(C)只有头指针的单循环链表(D)只有尾指针的单循环链表
【解析】本题中的两种操作要求快速找到最后一个元素和第一个元素,不难想到,带有尾指针的单循环链表正好符合这两个要求。因此,本题的答案为(D)。
一个无限序列,可以为空;
一个无序序列,不能为空。
2,对顺序存储的线性表,设其长度为n,在任何位置上插入或删除操作都是等概率的。插入一个元素时大约要移动表中的()个元素。
n/2
n+1/2
n-1/2
n
n+1
n-1
3,线性表采用链式存储时,其地址:
必须是连续的;
部分地址必须是连续的;
一定是不连续的;
连续与否均可以。
8,线性表的表元存储方式有()和链接两种。
循环链接
单向链接
双向链接
顺序链接
三编程题
1,写出将单链表倒置的算法
2,将两个有序表合并成一个有序表
3,设计候选人得票数的算法,并按得票多少为序输出统计结果
2.2.1选择题
【1】链表不具有的特点是。
(A)可随机访问任一元素(B)插入删除不需要移动元素(C)不必事先考虑存储空间(D)所需空间与线性表长度成正比
(4)单循环链表:也只能从第一个结点开始依次找到最后一个结点。
所以本题的答案是(C)。
【5】如果线性表的最常用的操作是存取指定序号的元素和在最后进行插入和删除运算,则采用存储方式最节省时间。
(A)顺序表(B)双链表(C)带头结点的双链表(D)单循环链表
【解析】根据顺序表的适合于随机存取以及不便于在表中进行插入和删除操作的特点,可以确定本题的正确选择是(A)。
(A)单链表(B)双链表(C)带头结点的双循环链表(D)单循环链表
【解析】由于操作涉及寻找最后一个元素,对四种链表分析如下:
(1)单链表:从表中第一个结点开始到最后一个结点,时间耗费为O(n);
(2ห้องสมุดไป่ตู้双链表:和单链表一样;
(3)带头结点的双循环链表:可以直接从头结点沿前驱指针找到最后一个结点,因此时间耗费为O(1);
(2)双链表:和单链表一样。
(3)单循环链表:虽然可以从表尾结点直接到达表头结点,但运算开始时也是要从表头结点开始搜索,因此时间复杂度为O(n)。
(4)带头结点的双循环链表:从头结点的前驱指针可以直接到达表尾结点,因此不耗费搜索时间。所以,本题答案为(D)。
【3】如果线性表最常用的操作是存取第I个元素及其前驱的值,则采用方式存储节省时间。
8,线性表的链式存储结构优于顺序存储结构。
9,在线性表的顺序存储结构中,插入和删除时,移动元素的个数与该元素的位置有关。
10,线性表的链式存储结构的特点是用一组任意的存储单元存储线性表的数据元素。
二单选题(请从下列A,B,C,D选项中选择一项)
1,线性表是:
一个有限序列,可以为空;
一个有限序列,不能为空;
【解析】如图2- 所示,在只有尾指针的单循环链表中,在表尾插入S指向的结点,
图2-
为了插入S所指向的结点,要修改的指针有3条,在上图中分别用数字标出。对应的语句是:
S->next=R->next;
R->next=S;
R=S;
【8】在单链表中,在指针P所指结点的后面插入一个结点S的语句序列是。
【解析】如图2- 所示,在指针P所指的结点后面插入一个结点S,要修改两条指针,已经标出。
【6】设指针P指向单链表中的一个结点,则语句序列
U=P->next;
U=U->next;
将删除一个结点。
【解析】根据图2- ,我们可以看出,执行上面两条语句的结果只是把指针U向后移动了两个元素,而没有删除结点。因此,本题的答案是×。
图2-
【7】带头结点的单循环链表中,任一结点的后继指针均不空。
【解析】如图2- 是单循环链表的状态,可以看出,每个结点的后继指针均有所指。因此,本题的答案是√。
((p↑.llink)↑.llink)↑.rlink:=p p↑.llink:=(p↑.llink)↑.llink
7,在双向循环链表中,在p所指的结点之后插入指针f所指的结点,其操作是()。
p↑.rlink:=f; f↑.rlink:=p; (p↑.rlink)↑.llink:=f; f↑.rlink:=p↑.rlink
(A)单链表(B)双链表(C)单循环链表(D)顺序表
【解析】由于顺序表中对元素的存取可以直接根据编号(下标)。因此当指定存取元素的编号时,用顺序表作为链表的存储方式最节省时间。本题的正确答案是D。
【4】如果一个链表最常用的操作是在最后一个元素之后插入一个元素和删除最后一个元素,则采用方式存储最节省时间。
4,设单链表中指针p指着结点M,指针f指着将要插入的新结点X,问:
X插在链表中两个数据元素M和N之间时,先修改()。
p↑.link:=f
p↑.link:=p↑.link↑.link
p↑.link:=f↑.link
f↑.link:=p↑.link
f↑.link:=NIL
f↑.link:=P
5,设单链表中指针p指着结点A,若要删除A之后的结点(若存在),则需修改指针的操作为()。
p↑.rlink:=f; (p↑.rlink)↑.llink:=f; f↑.llink:=p; f↑.rlink:=p↑.rlink
f↑.llink:=p; f↑.rlink:=p↑.rlink; p↑.rlink:=f; (p↑.rlink)↑.llink:=f