a[i][j]=i*j;
A.O(m2)B.O(n2)C.O(m×n)D.O(m+n)
11、算法分析的两个主要方面是()。
A.正确性和简明性B.数据复杂性和程序复杂性
C.可读性和可维护性D.时间复杂性和空间复杂性
二、填空题:
1、数据结构是相互之间存在一种或多种特定关系的数据元素的集合,它包括三方面的内容,分别是数据的逻辑结构、( )和()。
2、数据的逻辑结构是从逻辑关系上描述数据,它与数据的( )无关,是独立于计算机的。
3、()结构与数据元素本身的内容和形式无关。
4、程序段“for(i=1;i<=n;i++){k++;for(j=1;j<=n;j++)x=x+k;}”的时间复杂度为()。
5、数据的存储结构(物理结构)可以用()、()、()及散列存储等四种存储方法表示。
三、判断题:
1、顺序存储方式优点是存储密度大,且插入和删除运算效率高。
()
2、顺序存储结构属于静态存储结构,链式存储结构属于动态存储结构。
( )
3、线性表的链接存储,表中元素的逻辑顺序与物理顺序一定相同。
()
4、数据的机内表示称为数据的存储结构。
()
5、在线性表的顺序存储结构中,逻辑上相邻的两个元素在物理位置上并不一定相邻。
()
6、线性表的链式存储结构优于顺序存储结构。
()
7、数据元素是数据的最小单位。
()
8、基于某种逻辑结构之上的运算,其实现是惟一的。
()
2线性表
一、选择题:
1、在表长为n的顺序表上做插入运算,平均要移动的结点数为()。
A.nB.n/2C.n/3D.n/4
2、在一个单链表中,若P所指结点不是最后结点,在P之后插入S所指结点,则执行()
A.S->next=P->next;P->next=S
B.P->next=S->next;S->next=P;
C.P->next=P;P->next=S;
D.P->next=S;S->next=P;
3、在已知头指针的单链表中,要在其尾部插入一新结点,其算法所需的时间复杂度为()
A.O
(1)B.O(log2n)C.O(n)D.O(n2)
4、对于只在表的首、尾两端进行插入操作的线性表,宜采用的存储结构为()
A.顺序表B.用头指针表示的单循环链表
C.用尾指针表示的单循环链表D.单链表
5、线性表是()
A.一个有限序列,可以为空B.一个有限序列,不能为空
C.一个无限序列,可以为空D.一个无限序列,不能为空
6、在n个结点的双链表的某个结点前插入一个结点的时间复杂度是()
A.O(n)B.O
(1)C.O(log2n)D.O(n2)
7、线性表采用链式存储时,结点的地址()
A.必须是连续的B.必须是不连续的
C.连续与否均可D.必须有相等的间隔
8、在单链表中,增加头结点的目的是()
A.使单链表至少有一结点B.标志表中首结点位置
C.方便运算的实现D.说明单链表是线性表的链式存储实现
9、带头结点的单链表head为空的判定条件是()
A.head=NULL;B.head->next=NULL;
C.head->next=head;D.head!
=NULL;
10、在一个具有n个结点的有序单链表中插入一个新结点并仍然有序的时间复杂度为()
A.O
(1)B.O(n)C.O(n2)D.O(log2n)
11、下列有关线性表的叙述中,正确的是()
A.线性表中的元素之间是线性关系
B.线性表中至少有一个元素
C.线性表中任何一个元素有且仅有一个直接前趋
D.线性表中任何一个元素有且仅有一个直接后继
12、在单链表中,存储每个结点需有两个域,一个是数据域,另一个是指针域,它指向该结点的()
A.直接前趋B.直接后继C.开始结点D.终端结点
13、将两个各有n个元素的有序表归并成一个有序表,其最少的比较次数是()。
A.nB.2n-1C.2nD.n-1
14、链表不具有的特点是()。
A.随机访问 B.不必事先估计存储空间
C.插入删除时不需移动元素D.所需的空间与线性表成正比
15、在一个单链表中,已知q所指结点是p所指结点的直接前趋,若在p,q之间插入s结点,则执行的操作是()。
A.s->next=p->next;p->next=s;B.q->next=s;s->next=p;
C.p->next=s->next;s->next=p; D.p->next=s;s->next=q;
16、链表具有的特点是()。
A.可随机访问任一元素B.插入、删除需要移动元素
C.不必事先估计存储空间D.存储空间是静态分配的
17、一个顺序表一旦说明,其中可用空间大小()
A.已固定B.可以改变C.不能固定D.动态变化
18、若某线性表中最常用的操作是取第i个元素和找第i个元素的前趋元素,则采用()存储方式最节省时间。
A.顺序表B.单链表C.双向链表D.单循环链表
19、两个指针P和Q,分别指向单链表的两个元素,P所指元素是Q所指元素的前驱的条件是()。
A.P->next==QB.Q->next==P
C.P==QD.P->next==Q->next
20、链表不具有的特点是()。
A.可随机访问任一元素B.插入、删除不需要移动元素
C.不必事先估计存储空间D.所需空间与线性表长度成正比
21、下面关于线性表的叙述中,错误的是()。
A.线性表采用顺序存储,必须占用一片连续的存储单元
B.线性表采用顺序存储,便于进行插入和删除操作
C.线性表采用链接存储,不必占用一片连续的存储单元
D.线性表采用链接存储,便于进行插入和删除操作
22、在n个结点的顺序表中,算法的时间复杂度是O
(1)的操作是()。
A.访问第i个结点(1≤i≤n)和求第i个结点的直接前趋(2≤i≤n)
B.在第i个结点后插入一个新结点(1≤i≤n)
C.删除第i个结点(1≤i≤n)
D.将n个结点从小到大排序
23、在一个单链表中,若删除p指向结点的后继结点,则执行的操作为()。
A.q=p->next;p->next=p->next->next;free(q);
B.p=p->next;q=p->next;p=q->next;free(q);
C.q=p->next->next;p=p->next;free(q);
D.p=p->next->next;q=p->next;free(q);
二、填空题:
1、在双链表中要删除已知结点*p,其时间复杂度为( )。
2、在仅有尾指针R指示的单循环链表R中,在表尾插入一个结点S的语句序列是( )。
3、在带头结点的双链表L中,指针P所指结点是开始结点的条件是( )。
4、在具有n个结点的双链表中做插入、删除运算,平均时间复杂度为( )。
5、在一个长度为n的顺序表中第i个元素(1≤i≤n)之前插入一个元素时,需向后移动( )个元素。
6、在双循环链表中,若要在指针p所指结点之前插入指针s所指的结点,则需执行下列语句:
s->prior=p->prior;p->prior->next=s;()和p->prior=s;。
7、已知指针p指向双向链表中的一个结点(非首结点、非尾结点),则将结点s插入在p结点的直接后继位置的语句是()s->prior=p;s->next->prior=s;p->next=s;
8、已知带表头结点的单链表L,指针p指向L链表中的一个结点(非首结点、非尾结点),则删除结点p的直接后继结点的语句是();删除首结点的语句是()。
三、判断题:
1、在有序的顺序表和有序的链表上,均可以使用折半查找法来提高查找速度。
()
2、顺序存储的线性表可以随机存取。
()
3、线性表采用顺序存储,必须占用一片连续的存储单元。
()
4、线性表的顺序存储结构优于链式存储结构。
()
四、程序设计题:
1、已知带头结点的单链表head中的结点是按整数值递增排序的,写一算法将值为x的结点插入到表head中,使head仍然有序。
2、用尾插入法建立带头结点的单链表。
3、写出将整数i插入到无头结点的链栈中的算法。
4、对给定的单链表L,编写一个删除L中值为x的结点的直接前趋结点算法。
]
3栈和队列
一、选择题:
1、循环队列是空队列的条件是()
A.Q->rear==Q->frontB.(Q->rear+1)%maxsize==Q->front
C.Q->rear==0D.Q->front==0
2、链栈与顺序栈相比,比较明显的优点是()
A.插入操作更加方便 B.删除操作更加方便
C.不会出现下溢的情况 D.不会出现上溢的情况
3、若一个栈的输入序列是1,2,3,……,n,输出序列的第一个元素是n,则第i个输出元素是()
A.n-iB.n–i+1C.iD.不确定
4、栈与一般线性表的区别主要在()
A.元素个数B.元素类型C.逻辑结构D.插入、删除元素的位置
5、一个链栈的栈顶指针是top,则执行出栈操作时(栈非空),用x保存被删除结点,则执行()
A.x=top;top=top->next;
B.x=top->data;
C.top=top->next;x=top->data;
D.x=top->data;top=top->next;
6、对于一个栈,给定输入序列为1,2,3,则下列不可能为输出序列的是()
A.1,2,3B.3,2,1C.3,1,2D.2,1,3
7、在链接队列执行入队操作( )
A.需判别队是否空B.需判别队是否满
C.限制在链表头p进行D.限制在链表尾p进行
8、以下不属于栈的基本运算是()。
A.删除栈顶元素B.删除栈底元素
C.判断栈是否为空D.将栈置为空栈
9、一个栈的入栈序列是a,b,c,d,e,则栈的不可能的输出序列是()。
A.e,d,c,b,a B.d,e,c,b,a
C.d,c,e,a,b D.a,b,c,d,e
10、设计一个判别表达式中左、右括号是否配对出现的算法,采用()数据结构最佳。
A.线性表的顺序存储结构 B.栈
C.队列 D.线性表的链式存储结构
11、循环队列的特点之一是不会产生()。
A.上溢出B.下溢出C.队满D.假溢出
12、设数组Data[n]作为循环队列Q的存储空间,front为队头指针,rear为队尾指针,则执行入队操作的语句为()。
A.rear=(rear+1)%(n+1)B.front=(front+1)%n
C.rear=(rear+1)%nD.front=(front+1)%(n+1)
13、一个栈的入栈序列是1,2,3,4,5,则栈的不可能的输出序列是()。
A.54321B.45321C.43512D.12345
14、栈是限定在()处进行插入或删除操作的线性表。
A.端点B.栈底C.栈顶D.中间
15、容量是10的循环队列的队头位置q->front为2,则队的第一个数据元素的位置是()
A.2B.3C.1D.0
16、循环队列的出队操作是()
A.q->front=(q->front+1)%maxsize;B.q->front=q->front+1;
C.q->rear=(q->rear+1)%maxsize;D.q->rear=q->rear+1;
17、当循环队列q是满队列时,存放队列元素的数组data有n个元素,则data中存放()个数据元素。
A.nB.n-1C.n-2D.0
18、以下哪一个不是队列的基本运算()。
A.从队尾插入一个新元素B.从队列中删除第i个元素
C.判断一个队列是否为空D.读取队头元素的值
19、从栈顶指针为top的链栈中删除一个结点,并将被删除结点的值保存到x中,其操作步骤为()。
A.x=top->data;top=top->nextB.top=top->next;x=top->data;
C.x=top;top=top->nextD.x=top->data;
20、在一个链队列中,若f,r分别为队首、队尾指针,则插入s所指结点的操作为()。
A.f->next=s;f=sB.r->next=s;r=s;
C.s->next=r;r=s;D.s->next=f;f=s
21、循环队列的入队操作应为()。
A.q->rear=q->rear+1;q->data[q->rear]=x;
B.q->data[q->rear++]=x;
C.q->rear=(q->rear+1)%maxsize;q->data[q->rear]=x;
D.q->data[q->rear]=x;q->rear=(q->rear+1)%maxsize;
22、栈和队列都是()。
A.限制存取点的线性结构B.限制存取点的非线性结构
C.顺序存储的线性结构D.链式存储的线性结构
23、实现递归调用属于()的应用。
A.队列B.栈C.数组D.树
二、填空题:
1、循环队列用数组data[m]存放其元素值,已知其头、尾指针分别是front和rear,则当前队列中元素的个数是( )。
2、栈顶的位置是随着( )操作而变化的。
3、假设以S和X分别表示进栈和退栈操作,则对输入序列a,b,c,d,e进行一系列栈操作SSXSXSSXXX之后,得到的输出序列为( )。
4、队列的队尾位置随着( )而变化。
5、在( )的情况下,链队列的出队操作需要修改尾指针。
6、从栈顶指针为top的链栈中删除一个结点,并将被删除的结点的值保存在x中,其操作步骤为();top=top->next;。
7、用数组A[m]来存放循环队列q的元素,且它的头、尾指针分别为front和rear,队列满足条件(q.rear+1)%m==q.front,则队列中当前的元素个数为()。
8、顺序栈s存储在数组s->data[max]中,对s进行出栈操作,执行的语句序列是()。
9、以下运算实现在循环队列中的初始化操作
voidinitqueue(seqqueue*q){q->front=0;();}
三、判断题:
1、循环队列中无上溢现象。
()
2、循环队列只有下溢,没有上溢。
()
3、对顺序栈而言,在栈满状态,如果此时再作进栈运算,则会发生“下溢”。
()
4、顺序队列和循环队列的队满和队空的条件是一样的。
()
5、为解决队列“假满”问题,可以采用循环数组实现队列存储。
()
6、队列是后进先出表。
()
7、栈是后进先出表。
()
四、应用题:
1、设有一个栈,元素进栈的次序为A,B,C,D,E,写出下列出栈序列的操作序列。
(1)CBADE
(2)ACBED,其中I为进栈操作,O为出栈操作。
2、如果编号为1、2、3的三辆列车进入一个栈式结构的站台,那么可能得到的三辆列车出站序列有哪些?
不可能出现的序列是什么?
五、程序设计题:
1、写出循环队列入队操作的函数。
四、树和二叉树
一、选择题:
1、在具有n个结点的完全二叉树中,结点i(i>1)的父结点是()
A.2iB.不存在C.2i+1D.⌊i/2⌋
2、有m个叶结点的哈夫曼树所具有的结点数为()
A.mB.m+1C.2mD.2m-1
3、下列陈述中正确的()
A.二叉树是度为2的有序树
B.二叉树中结点只有一个孩子时无左右之分
C.二叉树中必有度为2的结点
D.二叉树中最多只有两棵子树,并且有左右之分
4、以二叉链表作为二叉树的存储结构,在具有n个结点的二叉链表中(n>0),空链域的个数为()
A.2n-1B.n-1C.n+1D.2n+1
5、将一棵有100个结点的完全二叉树从上到下,从左到右依次对结点进行编号,根结点的编号为1,则编号为49的结点的左孩子编号为()
A.99B.98C.50D.48
6、在一棵具有五层的满二叉树中,结点总数为()
A.31B.32C.33D.16
7、在一棵二叉树中,第5层上的结点数最多为()
A.8B.15C.16D.32
8、由二叉树的( )遍历,可以惟一确定一棵二叉树
A.前序和后序B.前序和中序C.后序D.中序
9、具有35个结点的完全二叉树的深度为()。
A.5B.6
C.7D.8
10、已知一棵二叉树的先序遍历序列为EFHIGJK,中序遍历序列为HFIEJGK,则该二叉树根的右子树的根是()。
A.EB.F C.GD.J
11、由4个结点构造出的不同的二叉树个数共有()。
A.8B.10C.12D.14
12、在完全二叉树中,如果一个结点是叶子结点,则它没有()。
A.左孩子结点B.右孩子结点
C.左、右孩子结点D.左、右孩子结点和兄弟结点
13、深度为6的二叉树最多有()个结点。
A.64B.63C.32D.31
14、二叉树使用二叉链表存储,若p指针指向二叉树的一个结点,当p->lchild=NULL时,则()。
A.p结点左儿子为空B.p结点有右儿子
C.p结点右儿子为空D.p结点有左儿子
15、在具有n个结点的完全二叉树中,若结点i有左孩子,则结点i的左孩子编号为()。
A.2iB.不存在C.2i+1D.2i-1
16、将含100个结点的完全二叉树从根这一层开始,按从上到下从左到右依次对结点编号,根结点的编号为1。
编号为50的结点X的双亲的编号为()。
A.25B.48C.100D.无法确定
17、三个结点可以构成()种不同形状的二叉树。
A.1B.2C.3D.5
18、若由树转化得到的二叉树是非空的二叉树,则二叉树形状是()。
A.根结点无右子树的二叉树B.根结点无左子树的二叉树
C.根结点可能有左子树和右子树D.各结点只有一个儿子的二叉树
19、哈夫曼树是访问叶结点的带权路径长度()的二叉树。
A.最短B.最长C.可变D.不定
20、某二叉树的前序和后序序列正好相反,则该二叉树一定是()的二叉树。
A.空或只有一个结点B.高度等于其结点数
C.任一结点无左孩子D.任一结点无右孩子
二、填空题:
1、12个结点的完全二叉树的叶结点有( )个。
2、在任何一棵二叉树中,度为0的结点n0和度为2的结点n2之间的关系是( )。
3、已知完全二叉树的第4层有4个结点,则其叶子结点数是( )。
4、10个结点的完全二叉树的叶结点有( )个。
5、深度为6的二叉树最多有()个结点。
6、一个二叉树中,度为2的结点有3个,则叶结点有()个。
7、若二叉树的一个叶子是某子树的中根遍历序列中的第一个结点,则它必是该子树的后根遍历序列中的()个结点。
8、下图为某树的静态双亲表示,则结点D、E的双亲结点分别为()和()。
A
-1
B
0
C
0
D
1
E
2
0
1
2
3
4
9、具有m个叶结点的哈夫曼树共有()个结点。
10、二叉树通常有()存储结构和()存储结构两种。
11、二叉树在二叉链表表示方式下,p指向二叉树的根结点,经运算s=p;while(s->rchild)s=s->rchild后,s指针指向()结点。
三、判断题:
1、完全二叉树中,若一个结点没有左孩子,则它必须是叶子。
()
2、由二叉树结点的先根序列和后根序列可以唯一地确定一棵二叉树。
()
3、一般在哈夫曼树中,权值越大的叶子离根结点越近。
()
4、二叉树中任何一个结点的度都是2。
()
5、一棵哈夫曼树中不存在度为1的结点。
()
6、若一个二叉树的叶结点是先根遍历序列的最后一个结点,则它必是中根遍历的序列中的最后一个结点。
()
7、中序遍历二叉排序树的结点不能得到排好序的结点序列。
()
8、完全二叉树一定是满二叉树。
()
9、由二叉树的前序和中序遍历序列可以推导出此二叉树的后序遍历序列。
()
10、满二叉树一定是完全二叉树。
()
11、完全二叉树可采用顺序存储结构实现存储,非完全二叉树则不能。
()
四、应用题:
1、对给定的一组权值W={5,2,9,11,8,3,7},试构造相应的哈夫曼树,并计算它的带权路径长度。
2、已知一棵二叉树的前序序列和中序序列分别如下,请画出该