}
printf(“max=%d,min=%d”,max,min);
}
第二章复习题
1.下述哪一条是顺序存储结构的优点?
(A)
A.存储密度大B.插入运算方便
C.删除运算方便D.可方便地用于各种逻辑结构的存储表示
2.下面关于线性表的叙述中,错误的是哪一个?
(B)
A.线性表采用顺序存储,必须占用一片连续的存储单元。
B.线性表采用顺序存储,便于进行插入和删除操作。
C.线性表采用链接存储,不必占用一片连续的存储单元。
D.线性表采用链接存储,便于插入和删除操作。
)的有限序列C个(n.线性表是具有3.
(n>=0)。
A.表元素B.字符C.数据元素D.数据项
4.若某线性表最常用的操作是存取任一指定序号的元素和在最后进行插入和删除运算,则利用(A)存储方式最节省时间。
A.顺序表
B.单循环链表
C.带头结点的双循环链表D.双链表
5.某线性表中最常用的操作是在最后一个元素之后插入一个元素和删除第一个元素,则采用(D)存储方式最节省运算时间。
A.单链表B.仅有头指针的单循环链表
C.双链表D.仅有尾指针的单循环链表
6.若某表最常用的操作是在最后一个结点之后插入一个结点或删除最后一个结点。
则采用)存储方式最节省运算时间。
D(.
A.单链表B.双向链表
C.单循环链表D.带头结点的双向循环链表
7.链表不具有的特点是(B)
A.插入、删除不需要移动元素B.可随机访问任一元素
C.不必事先估计存储空间
D.所需空间与线性长度成正比
8.下面的叙述不正确的是(BC)
A.线性表在链式存储时,查找第i个元素的时间同i的值成正比
B.线性表在链式存储时,查找第i个元素的时间同i的值无关
C.线性表在顺序存储时,查找第i个元素的时间同i的值成正比
D.线性表在顺序存储时,查找第i个元素的时间同i的值无关
9.若长度为n的线性表采用顺序存储结构,在其第i个位置插入一个新元素的算法的时间复杂。
(1<=i<=n+1))C度为(.
A.O(0)B.O
(1)C.O(n)
D.O(n2)
10.对于顺序存储的线性表,访问结点和增加、
删除结点的时间复杂度为(C)。
A.O(n)O(n)B.O(n)O
(1)C.
O
(1)O(n)D.O
(1)O
(1)
11.线性表(a1,a2,…,an)以链接方式存储时,访问第i位置元素的时间复杂性为(C)
A.O(i)B.O
(1)C.O(n)
D.O(i-1)
12.非空的循环单链表head的尾结点p满足(A)。
A.p->next==head
B.p->next==NULL
C.p==NULLD.p==
head
13.循环链表H的尾结点P的特点是(A)。
A.P->NEXT==HB.P->NEXT==
H->NEXT
C.P==H
P==H->NEXTD.
14.完成在双循环链表结点p之后插入s的操作是(D);
A.p->next=s;s->prior=p;p->next->prior=s;
s->next=p->next;
B.p->next->prior=s;p->next=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;
s->next=p->next;
p->next->prior=s;p->next=s;
15.在双向循环链表中,在p指针所指向的结点前插入一个指针q所指向的新结点,其修改指针的操作是(D)。
A.
p->prior=q;
q->next=p;
p->prior->next=q;q->prior=p->prior;
B.q->prior=p->prior;p->prior->next=q;
q->next=p;p->prior=q->next;
p->prior->next=q;p->next=q;q->next=p;C.
q->next=p;
D.
p->prior->next=q;
q->next=p;
q->prior=p->prior;p->prior=q;
16.在单链表指针为p的结点之后插入指针为s的结点,正确的操作是:
(B)。
A.p->next=s;s->next=p->next;
B.s->next=p->next;p->next=s;
C.p->next=s;p->next=s->next;
p->next=s->next;p->next=s;
.D
的带头结点的单链head17.对于一个头指针为B)表,判定该表为空表的条件是(..Ahead==NULLBHead->next==NULL
head!
=NULLHead->next==headC.D.
所指的结点时须修改p在双向链表中,删除18
。
)指针(A
Ap->prior->next=p->next;.p->next->prior=p->prior;
.Bp->prior=p->prior->prior;
p->prior->next=p;
p->next->prior=p;.C.
p->next=p->next->next
p->next=p->prior->prior
..Dp->prior=p->next->next;
且很少进行当线性表的元素总数基本稳定,19.但要求以最快的速度存取线性插入和删除操作,表中的元素时,应采用顺序存储结构。
)用数组表示,假.线性表L=(a1,a2,…,an20则删除一个元定删除表中任一元素的概率相同n-1)/2素平均需要移动元素的个数是(
为.设单链表的结点结构为(data,next),next21的为xdata指针域,已知指针px指向单链表中若将结,data指向为y的新结点结点,指针py之后,则需要执行以下语y点插入结点:
py->next=px->next;px->next=py句
个元素n的顺序表中第i22.在一个长度为)之前插入一个元素时,需向后移动(1<=i<=nn-i+1个元素。
在已知的n个结点的单链表,对于一个具有23.O
(1),后插入一个新结点的时间复杂度为p结点.
的结点后插入一个新结点的时间在给定值为x复杂度为O(n)
根据线性表的链式存储结构中每一个结点包24.和多重含的指针个数,将线性链表分成单链表,链表又可分成链表;而又根据指针的连接方式,(动态)链表和静态链表
循环单链表的最大优点是:
从任一结点出发25.都可访问到链表中每一个元素则删中的某结点,指向单链表26.已知指针pL是结后继点的语句除其q=p->next;p->next=q->next;free(q);
中只有一个元素结27.带头结点的双循环链表L->next->next==L点的条件是:
所指结点有后继结点L中,指针p28.在单链的条件是p->next!
=null
为空表的条件是:
带头结点的双循环链表L29.L->next==L&&L->prior==L
结点的操作是:
p结点之后插入s在单链表30.
s->next=p->next;p->next=s;
复习题第三章.
1.一个栈的输入序列为123…n,若输出序列的第一个元素是n,输出第i(1<=i<=n)个元素是(B)。
iC.n-i+1B.不确定A.
D.n-I
则下列序列中,一个栈的输入序列为2.12345B)。
不可能是栈的输出序列的是(
A.23415B.54132
D.15432
C.23145
时,经过3.,可以变为CBA输入序列为ABCB)的栈操作为(
A.push,pop,push,pop,push,pop
B.push,push,push,pop,pop,pop
C.push,push,pop,pop,push,pop
D.push,pop,push,push,pop,pop
存储,初始栈顶指针V[1..n]4.若一个栈以向量C。
)(x,top为n+1则下面进栈的正确操作是
.Atop=top+1;V[top]=x
V[top]:
=x;top:
=top+1B.
V[top]:
=xC.top:
=top-1;
D.V[top]:
=x;top:
=top-1
5.设计一个判别表达式中左,右括号是否配对出现的算法,采用(D)数据结构最佳。
A.线性表的顺序存储结构B.队列
C.线性表的链式存储结构D.
栈
6.用链接方式存储的队列,在进行删除运算时(D)。
A.仅修改头指针B.仅修改尾指针
C.头、尾指针都要修改D.头、尾指针可能都要修改
7.假设以数组A[m]存放循环队列的元素,其头尾指针分别为front和rear,则当前队列中的元素个数为(A)。
A.(rear-front+m)%m
B.rear-front+1
C.(front-rear+m)%m
D.(rear-front)%m
8.循环队列存储在数组A[0..m]中,则入队时的。
)D操作为(.
A.rear=rear+1B.
rear=(rear+1)mod(m-1)
C.rear=(rear+1)modmD.
rear=(rear+1)mod(m+1)
9.若用一个大小为6的数组来实现循环队列,且当前rear和front的值分别为0和3,当从队列中删除一个元素,再加入两个元素后,rear和front的值分别为多少?
(B)
A.1和5B.2和4
C.4和2D.5和1
10.栈和队列的共同点是(C)。
都是先进先出A.
B.都是先进后出
只允许在端点处插入和删除元素C.
没有共同点D.
栈和队都是(11.)
链式存储的非线.顺序存储的线性结构AB.
性结构限制存取点的非限制存取点的线性结构C.D.
线性结构.
,的初始状态为空,元素e112.设栈S和队列Q,一个元素出依次通过栈Se3,e4,e5和e6e2,
,个元素出队的序列是e2栈后即进队列Q,若6。
的容量至少应该是(C)e4,e3,e6,e5,e1则栈SC.3.6B.4AD.2
十六进13.设有一个空栈,栈顶指针为1000H(PUSH,,经过,3,4,5现有输入序列为制),1,2输PUSH,POP,PUSH,POP,PUSH,PUSH之后,(设,而栈顶指针值是出序列100C_23_个字节。
)为顺序栈,每个元素占4若栈采用顺序存储方式存储,现两栈共享空14.
栈顶,栈个栈(i=1,2),top[i]代表第i间V[1..m]则栈满的条件,V[m]栈2的底在1的底在v[1],。
)是(B
B.top[1]+1=top[2]A.|top[2]-top[1]|=0
D.top[1]=top[2]C.top[1]+top[2]=m
循环队列的引入,目的是为了克服_假上溢_。
15.
复习题第五章.
,采用压缩存储阶的对称矩阵A1.设有一个10为第一元素,以行序为主存储下三角,a11方式,,每个元素占一个地址空间,则其存储地址为1
。
B)a85的地址为(
B.33A.13
D.40C.18
将其的每个元素占五个字节,数组A[0..5,0..6]2.
的内存单1000按列优先次序存储在起始地址为)。
A(元中,则元素A[5,5]的地址是C.1205A.1175B.1180
D.1210
的三对角矩阵,按行1..100]将一个A[1..100,3.
中元素A‥298]中,优先存入一维数组B[1195。
A66,65,在B数组中的位置K4.设二维数组A[1..m,1..n](即m行n列)按行存储在数组B[1..m*n]中,则二维数组元素A[i,j]在一维数组B中的下标为(A)。
A.(i-1)*n+jB.(i-1)*n+j-1
C.i*(j-1)D.j*m+i-1
5.有一个100*90的稀疏矩阵,非0元素有10个,设每个整型数占2字节,则用三元组表示该矩阵时,所需的字节数是(B)。
A.60B.66C.
18000D.33
6.已知广义表LS=((a,b,c),(d,e,f)),运用head和tail函数取出LS中原子e的运算是(C)。
A.head(tail(LS))
B.tail(head(LS))
C.head(tail(head(tail(LS)))
D.head(tail(tail(head(LS))))
7.广义表A=(a,b,(c,d),(e,(f,g))),则下面式子Head(Tail(Head(Tail(Tail(A)))))的值为(D)。
A.(g)B.(d)C.c
D.d
8.广义表((a,b,c,d))的表头是(C),表尾是(B)。
A.aB.()C.(a,b,c,d)D.(b,c,d)
。
)A)的表头为(a,(b,c),d,e广义表(9.
A.aB.a,(b,c)C.(a,(b,c))
D.(a)
10.设广义表L=((a,b,c)),则L的长度和深度分别为(C)。
A.1和1B.1和3C.
1和2D.2和3
11.已知广义表LS=((a,b,c),(d,e,f)),运用head和tail函数取出LS中原子e的运算是(C)。
A.head(tail(LS))
B.tail(head(LS))
C.head(tail(head(tail(LS)))
D.head(tail(tail(head(LS))))
12.广义表A=(a,b,(c,d),(e,(f,g))),则下面式子的值为(D)。
Head(Tail(Head(Tail(Tail(A)))))
C.cB.(d)A.(g)
D.d
)中,元A线性表中元素存放在向量(1,…,n13.中的最大素是整型数。
试写出递归算法求出A和最小元素。
intMinMaxValue(intA[],intn,int*max,int
*min)
{if(n>0)
{if(*maxif(*min>A[n])*min=A[n];
MinMaxValue(A,n-1,max,min);
}//算法结束
算法调用格式MinMaxValue
(arr,n,&max,&min);arr是具有n个整数的一维数组,max=-32768是最大数的初值,min=32767是最小数的初值。
voidmaxmin(intA[],int*e_max,int*e_min,int
low,inthigh)
{
if((high-low)<=1){//个数
if(A[high]>A[low]){
*e_max=A[high];
*e_min=A[low];
}
else{
*e_max=A[low];
*e_min=A[high];
}
}
else{
mid=(low+high)/2;
maxmin(A,&x1,&y1,low,mid);
maxmin(A,&x2,&y2,mid+1,high);
*e_max=max(x1,x2);
*e_min=min(y1,y2);
}
}
第六章复习题
1.算术表达式a+b*(c+d/e)转为后缀表达式后为(B)
A.ab+cde/*B.abcde/+*+
C.abcde/*++D.abcde*/++
2.设树T的度为4,其中度为1,2,3和4的结点个数分别为4,2,1,1则T中的叶子数为(D)
A.5B.6C.7
D.8
3.设森林F对应的二叉树为B,它有m个结点,中第F森林n,的右子树结点个数为p,p的根为B.
一棵树的结点个数是(A)
A.m-nB.m-n-1
C.m-n+1D.条件不足,无法
确定
4.若一棵二叉树具有10个度为2的结点,5个度为1的结点,则度为0的结点个数是(B)
A.9B.11C.15D.不确定
5.设森林F中有三棵树,第一,第二,第三棵树的结点个数分别为M1,M2和M3。
与森林F对应的二叉树根结点的右子树上的结点个数是(D)。
A.M1B.M1+M2
C.M3D.M2+M3
6.一棵完全二叉树上有1001个结点,其中叶子结点的个数是(C)
A.499B.500C.501D.505
7.设给定权值总数有n个,其哈夫曼树的结点总数为(D)
2n.B.不确定A
2n-1
D..2n+1C)8.有关二叉树下列说法正确的是(B
A.二叉树的度为2
2B.一棵二叉树的度可以小于
.二叉树中至少有一个结点的度为2C2.二叉树中任何一个结点的度都为D
为h9.一个具有1025个结点的二叉树的高)C(至1025之间C.11A.11
至1024之间.D10B.10
,h,所有结点的度或为010.一棵二叉树高度为)结点或为2,则这棵二叉树最少有(B
B.2h-1A.2h
h+1
.DC.2h+1
)D(11.对于有n个结点的二叉树,其高度为log2n.Bnlog2n.A
.不确定DC.|+1log2n
的二叉树最大的结点数为.高度为12K。
(B)2k.A
B.2k-1
C.2k-1D.2k-1-1
13.一棵树高为K的完全二叉树至少有(C)个结点.
A.2k–1B.2k-1–1
C.2k-1D.2k
14.利用二叉链表存储树,则根结点的右指针是(C)。
A.指向最左孩子B.指向最右孩子
C.空D.非空
15.对二叉树的结点从1开始进行连续编号,要求每个结点的编号大于其左、右孩子的编号,同一结点的左右孩子中,其左孩子的编号小于其右孩子的编号,可采用(C)次序的遍历实现编号。
A.先序B.中序
C.后序D.从根开始按层次遍历
树的后根遍历序列等同于该树对应的二叉树.16.
的(B).
A.先序序列B.中序序列C.
后序序列
17.若二叉树采用二叉链表存储结构,要交换其所有分支结点左、右子树的位置,利用(AC)遍历方法最合适。
A.前序B.中序C.后序
D.按层次
18.已知一棵二叉树的前序遍历结果为ABCDEF,中序遍历结果为CBAEDF,则后序遍历的结果为(A)。
A.CBEFDAB.FEDCBA
C.CBEDFAD.不定
19.对于前序遍历与中序遍历结果相同的二叉树为(F);对于前序遍历和后序遍历结果相同的二叉树为(B)。
A.一般二叉树
B.只有根结点的二叉树
C.根结点无左孩子的二叉树
.根结点无右孩子的二叉树D
E.所有结点只有左子数的二叉树
F.所有结点只有右子树的二叉树
20.一棵非空的二叉树的先序遍历序列与后序遍
历序列正好相反,则该二叉树一定满足(C)
A.所有的结点均无左孩子
B.所有的结点均无右孩子
C.只有一个叶子结点
D.是任意一棵二叉树
21.一棵左子树为空的二叉树在先序线索化后,其中空的链域的个数是:
(D)
A.不确定B.0C.1
D.2
22.一棵左右子树均不空的二叉树在先序线索化后,其中空的链域的个数是:
(B)。
A.0B.1C.2
D.不确定
23.若X是二叉中序线索树中一个有左孩子的结点,且X不为根,则x的前驱为(C)
A.X的双亲
的右子树中最左的结点B.X.
C.X的左子树中最右结点
D.X的左子树中最右叶结点
24.引入二叉线索树的目的是(A)
A.加快查找结点的前驱或后继的速度
B.为了能在二叉树中方便的进行插入与删除
C.为了能方便的找到双亲
D.使二叉树的遍历结果唯一
25.n个结点的线索二叉树上含有的线索数为(C)
A.2nB.n-lC.n+l
D.n
26.由3个结点可以构造出多少种不同的二叉树?
(D)
A.2B.3C.4D.5
27.设F是一个森林,B是由F变换得的二叉树。
若F中有n个非终端结点,则B中右指针域为空的结点有(C)个。
A.n-1B.n
C.n+