}
printf(“max=%d,min=%d”,max,min);
}
第二章复习题
1.下述哪一条是顺序存储结构的优点?
(A)
A.存储密度大B.插入运算方便
C.删除运算方便D.可方便地用于各种逻辑结构的存储表示
2.下面关于线性表的叙述中,错误的是哪一个?
(B)
A.线性表采用顺序存储,必须占用一片连续的存储单元。
B.线性表采用顺序存储,便于进行插入和删除操作。
C.线性表采用链接存储,不必占用一片连续的存储单元。
D.线性表采用链接存储,便于插入和删除操作。
3.线性表是具有n个(C)的有限序列(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个位置插入一个新元素的算法的时间复杂度为(C)(1<=i<=n+1)。
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==headB.p->next==NULL
C.p==NULLD.p==head
13.循环链表H的尾结点P的特点是(A)。
A.P->NEXT==HB.P->NEXT==H->NEXT
C.P==HD.P==H->NEXT
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;
C.q->next=p;p->next=q;p->prior->next=q;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;D.p->next=s->next;p->next=s;
17.对于一个头指针为head的带头结点的单链表,判定该表为空表的条件是(B)
A.head==NULLB.Head->next==NULL
C.Head->next==headD.head!
=NULL
18在双向链表中,删除p所指的结点时须修改指针(A)。
A.p->prior->next=p->next;p->next->prior=p->prior;
B.p->prior=p->prior->prior;p->prior->next=p;
C.p->next->prior=p;p->next=p->next->next
D.p->next=p->prior->prior.p->prior=p->next->next;
19.当线性表的元素总数基本稳定,且很少进行插入和删除操作,但要求以最快的速度存取线性表中的元素时,应采用顺序存储结构。
20.线性表L=(a1,a2,…,an)用数组表示,假定删除表中任一元素的概率相同,则删除一个元素平均需要移动元素的个数是(n-1)/2
21.设单链表的结点结构为(data,next),next为指针域,已知指针px指向单链表中data为x的结点,指针py指向data为y的新结点,若将结点y插入结点x之后,则需要执行以下语句:
py->next=px->next;px->next=py
22.在一个长度为n的顺序表中第i个元素(1<=i<=n)之前插入一个元素时,需向后移动n-i+1个元素。
23.对于一个具有n个结点的单链表,在已知的结点p后插入一个新结点的时间复杂度为O
(1),在给定值为x的结点后插入一个新结点的时间复杂度为O(n)
24.根据线性表的链式存储结构中每一个结点包含的指针个数,将线性链表分成单链表,和多重链表;而又根据指针的连接方式,链表又可分成(动态)链表和静态链表
25.循环单链表的最大优点是:
从任一结点出发都可访问到链表中每一个元素
26.已知指针p指向单链表L中的某结点,则删除其后继结点的语句是q=p->next;p->next=q->next;free(q);
27.带头结点的双循环链表L中只有一个元素结点的条件是:
L->next->next==L
28.在单链表L中,指针p所指结点有后继结点的条件是:
p->next!
=null
29.带头结点的双循环链表L为空表的条件是:
L->next==L&&L->prior==L
30.在单链表p结点之后插入s结点的操作是:
s->next=p->next;p->next=s;
第三章复习题
1.一个栈的输入序列为123…n,若输出序列的第一个元素是n,输出第i(1<=i<=n)个元素是(B)。
A.不确定B.n-i+1C.iD.n-I
2.一个栈的输入序列为12345,则下列序列中不可能是栈的输出序列的是(B)。
A.23415B.54132
C.23145D.15432
3.输入序列为ABC,可以变为CBA时,经过的栈操作为(B)
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
4.若一个栈以向量V[1..n]存储,初始栈顶指针top为n+1,则下面x进栈的正确操作是(C)。
A.top=top+1;V[top]=x
B.V[top]:
=x;top:
=top+1
C.top:
=top-1;V[top]:
=x
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)%mB.rear-front+1
C.(front-rear+m)%mD.(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和4C.4和2D.5和1
10.栈和队列的共同点是(C)。
A.都是先进先出B.都是先进后出
C.只允许在端点处插入和删除元素D.没有共同点
11.栈和队都是()
A.顺序存储的线性结构B.链式存储的非线性结构
C.限制存取点的线性结构D.限制存取点的非线性结构
12.设栈S和队列Q的初始状态为空,元素e1,e2,e3,e4,e5和e6依次通过栈S,一个元素出栈后即进队列Q,若6个元素出队的序列是e2,e4,e3,e6,e5,e1则栈S的容量至少应该是(C)。
A.6B.4C.3D.2
13.设有一个空栈,栈顶指针为1000H(十六进制),现有输入序列为1,2,3,4,5,经过PUSH,PUSH,POP,PUSH,POP,PUSH,PUSH之后,输出序列是_23_,而栈顶指针值是100CH。
(设栈为顺序栈,每个元素占4个字节。
)
14.若栈采用顺序存储方式存储,现两栈共享空间V[1..m],top[i]代表第i个栈(i=1,2)栈顶,栈1的底在v[1],栈2的底在V[m],则栈满的条件是(B)。
A.|top[2]-top[1]|=0B.top[1]+1=top[2]
C.top[1]+top[2]=mD.top[1]=top[2]
15.循环队列的引入,目的是为了克服_假上溢_。
第五章复习题
1.设有一个10阶的对称矩阵A,采用压缩存储方式,以行序为主存储下三角,a11为第一元素,其存储地址为1,每个元素占一个地址空间,则a85的地址为(B)。
A.13B.33C.18D.40
2.数组A[0..5,0..6]的每个元素占五个字节,将其按列优先次序存储在起始地址为1000的内存单元中,则元素A[5,5]的地址是(A)。
A.1175B.1180C.1205D.1210
3.将一个A[1..100,1..100]的三对角矩阵,按行优先存入一维数组B[1‥298]中,A中元素A66,65,在B数组中的位置K为195。
4.设二维数组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.cD.d
8.广义表((a,b,c,d))的表头是(C),表尾是(B)。
A.aB.()C.(a,b,c,d)D.(b,c,d)
9.广义表(a,(b,c),d,e)的表头为(A)。
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)))))
A.(g)B.(d)C.cD.d
13.线性表中元素存放在向量A(1,…,n)中,元素是整型数。
试写出递归算法求出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,intlow,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.7D.8
3.设森林F对应的二叉树为B,它有m个结点,B的根为p,p的右子树结点个数为n,森林F中第一棵树的结点个数是(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)
A.不确定B.2n
C.2n+1D.2n-1
8.有关二叉树下列说法正确的是(B)
A.二叉树的度为2
B.一棵二叉树的度可以小于2
C.二叉树中至少有一个结点的度为2
D.二叉树中任何一个结点的度都为2
9.一个具有1025个结点的二叉树的高h为(C)
A.11C.11至1025之间
B.10D.10至1024之间
10.一棵二叉树高度为h,所有结点的度或为0,或为2,则这棵二叉树最少有(B)结点
A.2hB.2h-1
C.2h+1D.h+1
11.对于有n个结点的二叉树,其高度为(D)
A.nlog2nB.log2n
C.ëlog2nû|+1D.不确定
12.高度为K的二叉树最大的结点数为(B)。
A.2kB.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.1D.2
22.一棵左右子树均不空的二叉树在先序线索化后,其中空的链域的个数是:
(B)。
A.0B.1C.2D.不确定
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+lD.n
26.由3个结点可以构造出多少种不同的二叉树?
(D)
A.2B.3C.4D.5
27.设F是一个森林,B是由F变换得的二叉树。
若F中有n个非终端结点,则B中右指针域为空的结点有(C)个。
A.n-1B.n
C.n+1D.n+2
28.下面几个符号串编码集合中,不是前缀编码的是(B)。
A.{0,10,110,1111}B.{11,10,001,101,0001}
C.{00,010,0110,1000}D.{b,c,aa,ac,aba,abb,abc}
29.一棵有n个结点的二叉树,按层次从上到下,同一层从左到右顺序存储在一维数组A[1..n]中,则二叉树中第i个结点(i从1开始用上述方法编号)的右孩子在数组A中的位置是(D)
A.A[2i](2i<=n)B.A[2i+1](2i+1<=n)
C.A[i-2]D.条件不充分,无法确定
30.若以{4,5,6,7,8}作为叶子结点的权值构造哈夫曼树,则其带权路径长度是__69__。
31.具有n个结点的满二叉树,其叶结点的个数是__(n+1)/2__。
33.树的孩子兄弟表示法存储,可以将一棵树转换为_二叉树_。
34.8层完全二叉树至少有___128___个结点,拥有100个结点的完全二叉树的最大层数为__7__。
35.如某二叉树有20个叶子结点,有30个结点仅有一个孩子,则该二叉树的总结点数为__69__。
36.已知一棵度为3的树有2个度为1的结点,3个度为2的结点,4个度为3的结点,则该树有__12__个叶子结点。
第七章复习题
1.图中有关路径的定义是(A)。
A.由顶点和相邻顶点序偶构成的边所形成的序列
B.由不同顶点所形成的