(4)CDR(CAR(CDR(((a,b),(e,f)))))
(5)CDR(CDR(CAR(((a,b),(e,f)))))
注:CAR运算相当于有些教材中的Head运算,CDR运算相当于Tail运算。
42. 利用广义表的Head和Tail运算,把原子d分别从下列广义表中分离出来,L1=(((((a),b),d),e));L2=(a,(b,((d)),e))。
类似本题的另外叙述有:
(1) 已知广义表L=((((a))),((b)),(c),d),试利用head和tail运算把原子项c从L中分离出来。
(2) 画出下列广义表的存储结构图,并利用取表头和取表尾的操作分离出原子e。
( a,((),b),(((e))))。
(3) 已知广义表A=((a,b,c),(d,e,f)) 试写出从表A中取出原子元素e的运算。 (4)请将香蕉banana用工具 H( )—Head( ),T( )—Tail( )从L中取出。
L=(apple,(orange,(strawberry,(banana)),peach),pear)
(5) 试利用广义表取表头head(ls)和取表尾tail(ls)的基本运算,将原子d从下列表中分解出来,请写出每一步的运算结果。
L=((a,(b)),((c,d)),(e,f))
(6) 画出广义表A=(a,(b,()),(((),c)))的第一种存储结构(表结点第二指针指向余表)图,并用取首元(head())和取尾元(tail())函数表示原子c。 43. 画出下列广义表的两种存储结构图((),A,(B,(C,D)),(E,F))。
44. 假设采用以下两种结点的链表作为广义表的存贮结构,表结点:(tag=1,hp,tp), 元素结点;(tag=0,data)。请画出下列广义表的存储结构图,并求它的深度和长度。 ( ( ) , ( ( ( ) ) , ( ( ( ) ) ) ) ) 45.知广义表A=(((a)),(b),c,(a),(((d,e))))
(1)画出其一种存贮结构图; (2)写出表的长度与深度;
(3)用求头部,尾部的方式求出e。【东北大学 1997 一、2 (5分)】
46.画出具有共享结构广义表(((b,c),d),(a),((a),((b,c),d)),e,())的存贮表示。 47. 广义表的结点结构如下:(TAG,DATA,LINK)。其中LINK为指向表中下一元素的指针;TAG为标志域;DATA为数据域,具体含义如下: TAG=0表示该结点为原子结点,DATA为其数据;TAG=1表示该结点为一个子表,DATA为指向该子表的指针。
(1)说明下列算法A的功能(注:算法中p,t,m,n,r,q为指针;算法中的NIL对应图中的^)
PROCEDURE A(p,t) BEGIN q:=NIL;
WHILE p<>NIL DO BEGIN
IF p^.TAG<>0 THEN BEGIN
m:=p^.DATA; A(m,n);
p^.DATA:=n; END;
r:=p^.LINK; p^.LINK:=q;
q:=p; p:=r
END; t:=q; END.
(2)对于 p所指的广义表,画出执行算法A后的表结构以及p,t的值:
p0a10d0e?0b0c?类似本题的另外叙述有:
题目基本相同,差别仅在于子表(b,c)与原子d的前后顺序颠倒。【浙江大学 1994 六 (7分)】
48. 写出对广义表A=(x,((a,b),c,d))作运算head(head(tail(A)))后的结果。 49.写出广义表的运算结果: TAIL[HEAD[TAIL[((a,b),(c,d))]]]=? 50. 广义表中原子个数是否即为广义表的长度?
51. 给出下列所示的3元多项式的广义表表示(分别以X1,X2,X3第一到第三层变元)
P(X1X2X3)=X15X23X3+2X15X22X34+5X15X23X33+3X1X24X32+X2X3+6 52. 设某表H如下:
A a1
B a2 b1
C c1
X c2
其中A,B,C为子表名,a1,a2,b1,c1,c2,x为其元素。
(1)试用广义表形式表示H,并写出运算HEAD(H)和TAIL(H) 函数从H中取出单元素a2的
运算; (2)画出表H的链式存储结构;
五 算法设计题
1. 设有大小不等的n 个数据组(n个数据组中数据的总数为m),顺序存放在空间区D内,每个数据占一个存储单元,数据组的首地址由数组S给出,(如下图所示),试编写将新数据x插入到第i个数据组的末尾且属于第i 个数据组的算法,插入后,空间区D和数组S的相互关系仍保持正确。
2. 以三元组表存贮的稀疏矩阵A,B非零元个数分别为m和n。试用类PASCAL语言编写时间复杂度为O(m+n)的算法将矩阵B加到矩阵A上去。A的空间足够大,不另加辅助空间。要求描述所用结构。
3. 设整数x1,x2,?,xN已存放在数组A中,编写一PASCAL递归过程,输出从这n个数中取出所有k 个数的所有组合(k<=n)。例:若A中存放的数是1,2,3,4,5,k为3,则输出结果应为:543,542,541,532,531,521,432,431,421,321。 类似本题的另外叙述有:
(1)题目基本相同,只是叙述不同,要求用PASCAL语言。【东南大学 2001 三 (10分)】 4.编写一个过程,对一个n×n矩阵,通过行变换,使其每行元素的平均值按递增顺序排列。 5. 设原来将N个自然数1,2,?,N按某个顺序存于数组A中,经过下面的语句计算,使A[I]的值变为A[1]到A[I-1]中小于原A[I]值的个数。
FOR I:=N DOWNTO 1 DO
BEGIN C:=0;
FOR J:=1 TO I-1 DO

