第2章线性表 BEG IN head =N LL: BEG IN new (head):p:=head FOR i=1TO n-1D0 BEG IN p".data=i:new (q):(A)(B)EN D: p”.daa=n:C): END Creat_link_list=head END PROCEDURE isephus(n,im:integer): BEG IN p=C reat (E1D0 BEGN pp nk:ED Q:Fjl EN END:【复旦大学1997四(12分)】 27.对于给定的线性链表had,下面的程序过程实现了按结点值非降次序输出链表中的所有结点,在每次输出一个结点时,就 把刚输出的结点从链表中删去。请在划线处填上适当的内容,使之成为一个完整的程序过程,每个空框只填一个语句。 TYPE nodeptr=nodetype: nodetype=RECO RD data:nteger:link nodeptr END: VAR head nodeptr: BEGN r=q:s=q".lnk WHLLE S<>NIL DO BEG IN Fs.daa<q.dataTH EN BEG IN)_:②)END: r=s:3) write(a.data 5) Fp=N I TH EN④)ELSE⑤): dispose (g): END: writeh END:【复旦大学1996七(20分)1995一(12分)与本题相似】 增序的 句链环上检素关锭值为x的结点,对该结点访问频度 O RD VAR Elink FUNCTIO N be(Elink x xhar):ink: VAR p.q:link: BEG N PDo Paet hbjliong.con//oy/docum e kaoyan/鱼ii502hn(第7/17页)2010415106
第2章 线性表 BEGIN head := NIL; IF n>0 THEN BEGIN new(head); p: =head; FOR i:=1 TO n-1 DO BEGIN p^.data:=i; new(q); (A)_; (B)_ END; p^.data:=n; (C)_; END; Creat_link_list:=head END; PROCEDURE josephus(n,i,m:integer); VAR p,q:nodeptr; j:integer; BEGIN p:=Creat_link_list(n); WHILE i>1 DO BEGIN p:=p^.link; i:=i-1 END; (D)_ ; WHILE j<n DO BEGIN FOR i:=1 TO m-1 DO p:=p^.link; (E)_; write(q^.data:8); (F)_ ; dispose(q); j:=j+1 END END;【复旦大学 1997 四 (12分)】 27.对于给定的线性链表head , 下面的程序过程实现了按结点值非降次序输出链表中的所有结点,在每次输出一个结点时,就 把刚输出的结点从链表中删去。请在划线处填上适当的内容,使之成为一个完整的程序过程,每个空框只填一个语句。 TYPE nodeptr =^ nodetype; nodetype = RECORD data : integer;link : nodeptr END; VAR head : nodeptr; PROCEDURE sort_output_delete (head : nodeptr); VAR p,q,r,s: nodeptr; BEGIN WHILE head <> NIL DO BEGIN p:= NIL ;q:= head;r:= q ;s:=q^.link ; WHILE s <> NIL DO BEGIN IF s^.data < q^.data THEN BEGIN (1)_; (2)_ END ; r:= s ; (3)_ END; write(q^.data : 5) ; IF p=NIL THEN (4)_ ELSE (5)_ ; dispose (q) ; END; writeln END;【复旦大学 1996 七 (20分) 1995 一(12分)与本题相似】 28.下面函数的功能是在一个按访问频度不增有序的,带头结点的双向链环上检索关键值为x的结点,对该结点访问频度计 数,并维护该链环有序。若未找到,则插入该结点。所有结点的频度域初值在建表时都为零。请将程序中四处空缺补写完 整。 TYPE link=^node node=RECORD key:char; freq:integer; pre,next:link; END; VAR l:link; FUNCTION loc(l:link;x:char):link; VAR p,q:link; BEGIN p:=l^.next; (1)_; WHILE p^.key<>x DO p:=p^.next; http://www.bjdisong.com/zzu/kaoyan/document/kaoyan/shiti/st02.htm(第 7/17 页)2010-4-15 11:00:46
第2章线性表 THEN [new (q):q".key=x:q".fireq=0] .fieq+1:q= :(2) ".fieq DO p=p"pre F p<>q (4)TH EN [q'.next=p,q'.pre=p'.pre:p'.pre'.next=q:p".pre=q] retum (g): END:【北京工业大学1999五12分)】 29.循环链表和b的结点值为字母,其中表非递减有序,下面的程序欲构造一个递增有序的循环链表c,其中结点的值为同时 ,调香表中出现的学体且中字母不重复,请补上程序中空铁的部分,并估计算法的时间夏杂度·(设品,的精点动 nod :lnk:VARc:Ink) VAR p.q.r.s:Ink: BEG N HE p<>aDo c:q=a;p=a.next; (1) W H ILE p".key=p”.next.keyD0[q=p;p=p".next]:(跳过相同字母} r=b'.next:_(2) W H ILE r".key<>p".key D0 r=r".next; IF K>b TH EN [s=p:q".next=p".next:_(3) .hext;c.next=s:c=s [q=p;p=p .next] c=c 【北京工业大学2000四15分)】 30.以下程序的功能是实现带附 的单链表数 居结点逆月 连接,请填空完善之 oid r :h为附加头结点指针:类型pohe同算法设计第3愿*/ {pon terp,q: p=h->next;h->next=N ULL: whil((1) {g=p;p=p>next:q>nex卡h>next:h->nexe②) 【西南交通大学2000 、9】 31.下面是用c语言编写的对不带头结点的单链表进行就地逆置的算法,该算法用L返回逆置后的链表的头指针,试在空缺处填 入适当的语句。 void reverse (linklist&L){ q=L (: 【北言理丁大受001九 1(6分)】 32 下面程序段是逆转单向循环链表的方法,P是原链表头指针,逆转后链表头指针仍为O (可以根据需要增加标识符) p=Po:go=N LL: (1) 3) (5) p^.next=q0:Po.next=p:po=p:【中国人民大学2000二、1(4分)
第2章 线性表 IF p=l THEN [ new(q); q^.key:=x; q^.freq:=0 ] ELSE {找到} [ p^.freq:=p^.freq+1; q:=p; (2)_; WHILE q^.freq>p^.pre^.freq DO p:=p^.pre; IF p<>q THEN [ (3)_ ] ]; IF (4)_ THEN [q^.next:=p, q^.pre;=p^.pre; p^.pre^.next:=q; p^.pre:=q] return(q); END;【北京工业大学 1999 五 (12分)】 29.循环链表a和b的结点值为字母,其中a表非递减有序,下面的程序欲构造一个递增有序的循环链表c,其中结点的值为同时 在a,b两链表中出现的字母,且c中字母不重复,请补上程序中空缺的部分,并估计算法的时间复杂度。(设a,b的结点数分 别为m,n) TYPE link=^node; node=RECORD key:char; next:link END; PROC jj(a,b:link; VAR c:link); VAR p,q,r,s:link; BEGIN new(c);c^.next:=c; q:=a; p:=a^.next; WHILE p<>a DO [(1)_; WHILE p^.key=p^.next^.key DO [q:=p; p=p^.next];{跳过相同字母} r:=b^.next ; (2)_; WHILE r^.key <>p^.key DO r:=r^.next; IF r<>b THEN [ s:=p; q^.next:=p^.next; (3) ; s^.next:=c^.next; c^.next:=s; c:=s ] ELSE [ q:=p; p:=p^.next ] ]; c:=c^.next; END; 算法时间复杂度为O(4)_ 【北京工业大学 2000 四 (15分)】 30. 以下程序的功能是实现带附加头结点的单链表数据结点逆序连接,请填空完善之。 void reverse(pointer h) /* h为附加头结点指针;类型pointer同算法设计第3题*/ { pointer p,q; p=h->next; h->next=NULL; while((1)_) {q=p; p=p->next; q->next=h->next; h->next=(2)_; } }【西南交通大学 2000 一、9】 31. 下面是用c语言编写的对不带头结点的单链表进行就地逆置的算法,该算法用L返回逆置后的链表的头指针,试在空缺处填 入适当的语句。 void reverse(linklist &L){ p=null;q=L; while(q!=null) { (1) ; q->next=p;p=q;(2)_ ; } (3)_; }【北京理工大学 2001 九、1 (6分)】 32.下面程序段是逆转单向循环链表的方法,p0 是原链表头指针,逆转后链表头指针仍为p0。 (可以根据需要增加标识符) p:= p0; q0:=NIL; WHILE (1)_ DO BEGIN (2)_; (3)_;(4)_;(5)_ END; p^.next:= q0; p0 ^.next:=p; p0:=p;【中国人民大学 2000 二、1(4分)】 http://www.bjdisong.com/zzu/kaoyan/document/kaoyan/shiti/st02.htm(第 8/17 页)2010-4-15 11:00:46
第2章线性表 num小于O时,输入结束。建立 PROC insert(head.x) {在链首为head的表中按递增序插入x} new (r data=x: IE head=N I TH EN [head=(1) r'next=(2) ELSE IF (3) TH EN [r.next=head:head=r] ELSE [p=head: WHLE④) ANDp^next≠NL)D0q=p:⑤ F TH EN next⑧) _:r^.next=(10) PRO creat(head) =(11) W H LE ENDP:【南京理工大学1999 4(11分)】 34.一元稀疏多项式以循环单链表按降幂排列,结点有三个域,系数域coef,指数域exp和指针域next现对链表求一阶导数 链表的头指针为ha,头结点的exp域为-l。 derivative(ha) {q=ha;pa=ha->next; wh正() {f() ){(③)):free(pa):paF(4)):} coef((5) ):pa>exp(6)):q=(⑦))} paF(⑧) 南 大学 35.下面 200 3 10分 最大元素所在结点的类PASCAL语言算法,请在横线填上内容,完成其功能 PE ode: next:ponter END: PRO CEDU RE dem ax pointer): VAR p,rponter:m :integ BEG IN r=L:p=Lt.next: F P<>N L THEN [m =p f .data:(1) :D=D↑,next: W H LE P<>N ILDO [F②) THEN L) _m =p t .data;] :p=p T.next: q=rt.next⑤ _:dipose(q) 对单链表中元素按插入方法排序的C语言描述算法如下,其中L为链表头结点指针。请填充算法中标出的空白处,完成其 ntdata:structnode*ext }nknodenk. void Insertsort(link L) (hkp,q,u; p=L->next:(1) whe(②) ht电w.biiong.oon加 m月ocam en taovan/使02.h加(第9/17页)20104-曰511046
第2章 线性表 33.一个无头结点的线性链表(不循环)有两个域。数据域data,指针域 next,链首head,下面算法用read(num)读入数据,当 num小于0时,输入结束。建立一个数据以递增序组成的链表。 PROC insert( head, x); {在链首为head的表中按递增序插入x} new(r);r^.data:=x; IF head=NIL THEN[ head:=(1) _; r^.next:= (2)_ ] ELSE IF (3)_ THEN [r^ .next:=head; head:=r] ELSE [p:=head; WHILE (4)_ AND (p^.next≠NIL ) DO[q:=p; (5)_ ]; IF (6)_ THEN [ q^ .next:=(7)_; r^.next:= (8)_; ] ELSE [p^.next:=(9)_; r^.next:= (10)_; ] ] ENDP; PROC creat(head); head:= (11)_; read(num); WHILE num>0 DO [ insert(head,num); read(num) ] ENDP;【南京理工大学 1999 三、4(11分)】 34. 一元稀疏多项式以循环单链表按降幂排列,结点有三个域,系数域coef ,指数域exp和指针域 next;现对链表求一阶导数 , 链表的头指针为ha,头结点的exp域为 –1。 derivative(ha) { q=ha ; pa=ha->next; while( (1)_) { if ( (2)_) { ( (3)_); free(pa); pa= ( (4) _); } else{ pa->coef ( (5) _); pa->exp( (6)_); q=( (7) _);} pa=( (8)_); } } 【南京理工大学 2000 三、3(10分)】 35.下面是删除单链表L中最大元素所在结点的类PASCAL语言算法,请在横线填上内容,完成其功能。 TYPE pointer =↑node; node=RECORD data:integer; next: pointer END; PROCEDURE delmax (L:pointer); VAR p,q,r:pointer; m:integer; BEGIN r:=L; p:=L↑.next; IF p<>NIL THEN [ m:=p↑.data; (1)_; p:=p↑.next; WHILE p<>NIL DO [ IF (2)_THEN [ (3)_ ; m:=p↑.data; ] (4)_; p:=p↑.next; ] q:=r↑.next; (5)_; dispose(q); ] END;【北京科技大学 1998 二】 36.对单链表中元素按插入方法排序的C语言描述算法如下,其中L为链表头结点指针。请填充算法中标出的空白处,完成其 功能。 typedef struct node {int data; struct node *next; }linknode,*link; void Insertsort(link L) { link p,q,r,u; p=L->next; (1)_; while((2)_) http://www.bjdisong.com/zzu/kaoyan/document/kaoyan/shiti/st02.htm(第 9/17 页)2010-4-15 11:00:46
第2章线性表 &&q->dat<=p->data)(r=q:q=q->next} u=p->next④ ⑤) _p=u 【北京科技大学001一(10分)】 3. 人求两个集合 和B之第C=AB的程序,即当日仅当e是A的一个元素,但不是B中的一个元素时,e大是C中的 一个 元素。 集合用有序链表实现, 切计 C为空:操作完成后A, B保特不变,C中 元素按递 排列。下面的函数a即pend (hste)是把值为e的新结点链接在由指针hst指向的结点的后面,并返回新结点的地址:函数dnce A,B)实现集合运算AB,并返回表示结果集合C的链表的首结点的地址。在执行AB运算之前,用于表示结果集合的链表首先 增加一个附加的表头结点,以便新结点的添加,当AB运算执行完毕,再删除并释放表示结果集合的链表的表头结点。 程序(a)(编者略去这个PASCAL程序) 程序(b) typedefstructnode(ntekm ent;structnode*lnk: NODE,郑, stinte) R-ODE判abe)): eum(ast m卡e N0 D E *d ifference (N0D E制,N0DE8) NODE米C*as C=lsE (NOD E#)m albc (sizeof(N 0 D E)): wh正) if (A->ekm entB->ekem ent)hst=append (astA->ekm ent):A=A->lnk: eeif②){A=A>mk:B=B>ink:}ELSE③) whe④ hst=append (hstA->elm ent:A=A>nk; ⑤):hst=C;C=C>hk;fiee(ast):retum C): ca而mC=d ifference (A,B)*/【上海大学2000一、4(10分)】 四应用型 线 有两种存储结构 是顺序表 ,并且 在处理过程中各表的长度会动态变化,线性表的总数也会自动地改变。在此情况下, 存储结物? (2)若 且很少进行插入和删除, 但要求以最快的速度存取线性表中的元素,那么应采用哪种存储结 枸?为什么?【西安电子科技大学1999软件 1(5分) 2.线性表的顺序存储结构具有三个弱点:其一,在作插入或删除操作时,需移动大量元素:其二,由于难以估计,必须预先 分配较大的空间,往往使存储空间不能得到充分利用:其三,表的容量难以扩充。线性表的链式存储结构是否一定都能够克 服上述三个弱点,试讨论之。【重庆大学2000二、5】 3.若较频繁地对一个线性表进行插入和删除操作,该线性表宜采用何种存储结构?为什么? 【北京航空航天大学1998一、2(4分)】 4.线性结构包括 和 线性表的存储结构分成 和 。请用类PASC AL语言描述这 两种结构。【华北计算机系统工程研究所1999 ,2(10分)】 5.线性表(a,2,.,a)用顺序映射表示时,a和a+1(1K=Kn)的物理位置相邻吗?链接表示时呢? 【东南大学1996 1(5分)】 说明在线性表的链式存储结构中,头指针与头结点之间的根本区别:头结点与首元结点的关系。 【眉门 1(14%B分)】 7试述头结点首元结点,头指针这三个概念的区别 【武汉交通科技大学1996二、23分)】【西安电子科技大学2001计应用二、1(5分)】 8.已知有如下定义的静态链表: TYPE com ponen卡RECORD dataekm p; nexto.m axsize END nkn/02.h加(第10/17页)2010-4151100
第2章 线性表 { r=L; q=L->next; while((3)_&& q->data<=p->data) {r=q; q=q->next;} u=p->next; (4)_; (5)_; p=u; } }【北京科技大学 2001 二 (10分)】 37.下面是一个求两个集合A和B之差C=A-B的程序,即当且仅当e是A的一个元素,但不是B中的一个元素时,e才是C中的一个 元素。集合用有序链表实现,初始时,A,B集合中的元素按递增排列,C为空;操作完成后A,B保持不变,C中元素按递增 排列。下面的函数append(last,e)是把值为e的新结点链接在由指针last指向的结点的后面,并返回新结点的地址;函数difference (A,B)实现集合运算A-B,并返回表示结果集合C的链表的首结点的地址。在执行A-B运算之前,用于表示结果集合的链表首先 增加一个附加的表头结点,以便新结点的添加,当A-B运算执行完毕,再删除并释放表示结果集合的链表的表头结点。 程序(a)(编者略去这个PASCAL程序) 程序(b) typedef struct node{ int element; struct node *link; }NODE; NODE *A,*B,*C; NODE *append (NODE *last,int e) { last->link=(NODE*) malloc (sizeof(NODE)); last->link->element=e; return(last->link); } NODE *difference(NODE *A,NODE *B) {NODE *C,*last; C=last=(NODE*) malloc (sizeof(NODE)); while (1)_ if (A->element<B->element) { last=append(last,A->element); A=A->link; } else if (2) _ { A=A->link; B=B->link; } ELSE (3) _ ; while (4) _ { last=append(last,A->element); A=A->link; } (5) _; last=C; C=C->link; free (last); return (C); } /*call form:C=difference(A,B);*/【上海大学 2000 一、4 (10分)】 四 应用题 1.线性表有两种存储结构:一是顺序表,二是链表。试问: (1)如果有 n个线性表同时并存,并且在处理过程中各表的长度会动态变化,线性表的总数也会自动地改变。在此情况下, 应选用哪种存储结构? 为什么? (2)若线性表的总数基本稳定,且很少进行插入和删除,但要求以最快的速度存取线性表中的元素,那么应采用哪种存储结 构?为什么?【西安电子科技大学 1999软件 二、1 (5分)】 2.线性表的顺序存储结构具有三个弱点:其一,在作插入或删除操作时,需移动大量元素;其二,由于难以估计,必须预先 分配较大的空间,往往使存储空间不能得到充分利用;其三,表的容量难以扩充。线性表的链式存储结构是否一定都能够克 服上述三个弱点,试讨论之。【重庆大学 2000 二、5】 3.若较频繁地对一个线性表进行插入和删除操作,该线性表宜采用何种存储结构?为什么? 【北京航空航天大学 1998 一、2(4分)】 http://www.bjdisong.com/zzu/kaoyan/document/kaoyan/shiti/st02.htm(第 10/17 页)2010-4-15 11:00:46 4.线性结构包括_、_、_和_。线性表的存储结构分成_和_。请用类PASCAL语言描述这 两种结构。【华北计算机系统工程研究所1999一、2(10分)】 5.线性表(a1,a2,.,an)用顺序映射表示时,ai 和ai+1(1<=i<n〉的物理位置相邻吗?链接表示时呢? 【东南大学 1996 一、1 (5分)】 6. 说明在线性表的链式存储结构中,头指针与头结点之间的根本区别;头结点与首元结点的关系。 【厦门大学 2000 五、1 (14%/3分)】 7. 试述头结点,首元结点,头指针这三个概念的区别. 【武汉交通科技大学 1996 二、2 (3分)】【西安电子科技大学2001计应用 二、1(5分)】 8. 已知有如下定义的静态链表: TYPE component=RECORD data:elemtp; next:0.maxsize END
第2章线性表 VAR stalistARRAY[O. 以 指向结 指向当 e指向前驱结点,现要求修改静态链表中n叹域中的内容,使得该静态链表有 双向链表的功能,从当前结点既能往后查找, 也能往前查找: (1)定义nex域中的内容。佣老的nex域中的值表示): (2)如何得到当前结点p的前驱(pE)的前驱,给出计算式: (3)如何得到D的后继,给出计算式:【中科院计算所2000四(10分)】 9.在单链表和双向链表中,能否从当前结点出发访问到任何一个结点? 【西安电子科技大学1999计应用一、1(5分)】 10如何通过改链的方法,把一个单向链表变成一个与原来链接方向相反的单向链表? 【中国人民大学2001 4(2分)】 1.下面是 法的核心部分,试说明该算法的功能。 m点有数据线d和指针a ext pre .ne <>N ILDO BEG N 【燕山大学2000 t.data TH EN pre=p ELSE retum (fake)EN D pe1分)】 12.设单链表结点指针域为ne t试写出别除链表中指针所指结点的直接后继的C语言语句: 【北到 5000 21 13.设单链表中某指针p所指结点(即p结点)的数据域为daa,链指针域为next,请写出在p结点之前插入结点的操作 (PASCAL语句)。【北京科技大学1999一、2(2分)】 14.有线性表a1,.,8),采用单链表存储,头指针为,每个结点中存放线性表中一个元素,现查找某个元素值等于X的结 下面 三种情况的查找语句。 要求时间尽量少。 浅性表中元素按递增有序。(3)线性表中元素按递减有序。 京邮电 (7分) 别指回 有片 (从小到大)单 中值的含义 PRO CEDURE exam (pa.pb) EG IN a t next-n?=nh t nex a↑.next∧:sl=0:2=0: [CASE pl t .data<p2t .data:[p=pl:pl=pl t .next:=2+1:dispose(p)]: pl t.datp21 .data:p2=p2t.next plt.dat=p2t .data:[p=pl:pl=pl t.nextp t .next=pat.next; pa↑.next=p:p2=p2↑nextsl=sl+l:]: EN D WH ILE pl DO [p=pl:pl=pl 1 .next:dipos(p):+1] 聚, 空 表中对罗 结点相互位置时修改指针的有关语句。 下列题目中的算法功能说明。将算法描述片段中的错误改正 4分) 用于在双链表中别除指针变 量p所指的结点 k-p :1 (2)(6分)下面的算法描述片段用于在双链表中指针变量所指结点后插入一个新结点: new (q); q.ink←p: p".rlnk+q: q'.rlnk-p".rlink; ht中bjiong.con //oyn/ocy/由i502hn(第11/17页)20104H15106
第2章 线性表 VAR stalist:ARRAY[0.maxsize] OF component; 以及三个指针:av指向头结点,p指向当前结点,pre指向前驱结点,现要求修改静态链表中next域中的内容,使得该静态链表有 双向链表的功能,从当前结点p既能往后查找,也能往前查找: (1) 定义next域中的内容。(用老的next域中的值表示); (2) 如何得到当前结点p的前驱(pre)的前驱,给出计算式; (3) 如何得到p的后继,给出计算式;【中科院计算所 2000 四 (10分)】 9. 在单链表和双向链表中,能否从当前结点出发访问到任何一个结点? 【西安电子科技大学1999计应用 一、1 (5分)】 10. 如何通过改链的方法,把一个单向链表变成一个与原来链接方向相反的单向链表? 【中国人民大学 2001 二、4 (2分)】 11. 下面是一算法的核心部分,试说明该算法的功能。 pre:=L↑.next; {L是一单链表,结点有数据域 data和指针域 next} IF pre<>NIL THEN WHILE pre↑.next<>NIL DO BEGIN p:=pre↑.next; IF p↑.data>=pre↑.data THEN pre:=p ELSE return(false) END; return(true); 【燕山大学 2000 七、1 (7分)】 12. 设单链表结点指针域为next,试写出删除链表中指针p所指结点的直接后继的C语言语句。 【北京科技大学 2000 一、3】 13. 设单链表中某指针p所指结点(即p结点)的数据域为data,链指针域为next,请写出在p结点之前插入s结点的操作 (PASCAL语句)。【北京科技大学 1999 一、2 (2分)】 14. 有线性表(a1,a2,.,an),采用单链表存储,头指针为H,每个结点中存放线性表中一个元素,现查找某个元素值等于X的结 点。分别写出下面三种情况的查找语句。要求时间尽量少。 (1)线性表中元素无序。 (2)线性表中元素按递增有序。 (3)线性表中元素按递减有序。 【北京邮电大学 1994 七 (7分)】 15.设pa,pb分别指向两个带头结点的有序(从小到大)单链表。仔细阅读如下的程序,并回答问题: (1) 程序的功能。(2) s1,s2中值的含义。(3) pa,pb中值的含义。 PROCEDURE exam(pa,pb) BEGIN p1:=pa↑.next; p2:=pb↑.next; pa↑.next:=∧; s1:=0; s2:=0; WHILE p1≠∧ AND p2≠∧ DO [ CASE p1↑.data<p2↑.data: [p:=p1; p1:=p1↑.next; s2:=s2+1; dispose(p) ]; p1↑.data>p2↑.data: p2:=p2↑.next; p1↑.data=p2↑.data: [p:=p1; p1:=p1↑.next; p↑.next:= pa↑.next; pa↑.next:= p; p2:= p2↑.next;s1:=s1+1; ]; END ]; WHILE p1≠∧ DO [ p:=p1; p1:=p1↑.next; dispose(p); s2:=s2+1 ] END;【南京航空航天大学 1995 十 (9分)】 16.写出下图双链表中对换值为23和15的两个结点相互位置时修改指针的有关语句。 结点结构为:(llink,data,rlink) 【北京邮电大学 1992 三、4 (25/4分)】 17.按照下列题目中的算法功能说明,将算法描述片段中的错误改正过来。 (1) (4分)下面的算法描述片段用于在双链表中删除指针变量p所指的结点: p^.rlink←p^.llink^.rlink; p^.llink←p.^rlink^.llink dispose(p); (2) (6分)下面的算法描述片段用于在双链表中指针变量p所指结点后插入一个新结点: new(q); q^.llink←p; p^.rlink←q; q^.rlink←p^.rlink; http://www.bjdisong.com/zzu/kaoyan/document/kaoyan/shiti/st02.htm(第 11/17 页)2010-4-15 11:00:46