c[i][j]=i+j;
A.O
(1)算法分析的两个主要方面是
A.空间复杂性和时间复杂性
C.可读性和文档性
B.易读性
D)。
B.O(n)
D)。
C.健壮性
C.O(log2n)
D.高效性
2
D.O(n2)
B.O(n)C.(log2n)
A)。
B.正确性和简明性
D.数据复杂性和程序复杂性
2
D.O(n2)
C•解决问题的有限运算步骤D.程序设计方法
计算机算法必须具备输入、输出和(C)。
A.计算方法B•排序方法
第2章线性表
-、判断题
1.线性表的链式存储结构优于顺序存储。
(X)
2.链表的每个结点都恰好包含一个指针域。
(X)
3.在线性表的链式存储结构中,逻辑上相邻的两个元素在物理位置上并不一定紧邻。
(V)
4.顺序存储方式的优点是存储密度大,插入、删除效率高。
(X)
5.线性链表的删除算法简单,因为当删除链中某个结点后,计算机会自动地将后续的各个单元向前
移动。
(X)
6.顺序表的每个结点只能是一个简单类型,而链表的每个结点可以是一个复杂类型。
(X)
7.线性表链式存储的特点是可以用一组任意的存储单元存储表中的数据元素。
(V)
8.线性表采用顺序存储,必须占用一片连续的存储单元。
(V)
9.顺序表结构适宜进行顺序存取,而链表适宜进行随机存取。
(X)
10.插入和删除操作是数据结构中是最基本的两种操作,所以这两种操作在数组中也经常使用。
(X)
二、填空题
1.顺序表中逻辑上相邻的元素在物理位置上必须相邻。
2.线性表中结点的集合是有限的,结点间的关系是一对一关系。
3.顺序表相对于链表的优点是节省存储和随机存取。
4.链表相对于顺序表的优点是插入、删除方便。
5.当线性表的元素总数基本稳定,且很少进行插入和删除操作,但要求以最快速度存取线性表中的
元素时,应采用顺序存储结构。
6.顺序表中访问任意一个结点的时间复杂度均为0
(1)。
7.链表相对于顺序表的优点是插入、删除方便;缺点是存储密度小。
_
8.在双向链表中要删除已知结点*P,其时间复杂度为0
(1)。
9.在单向链表中要在已知结点*P之前插入一个新结点,需找到*P的直接前驱结点的地址,其查找的
时间复杂度为0(n)。
10.在单向链表中需知道头指针才能遍历整个链表。
11.线性表中第一个结点没有直接前驱,称为开始结点。
12.在一个长度为n的顺序表中删除第i个元素,要移动n-i个元素。
13.在一个长度为n的顺序表中,如果要在第i个元素前插入一个元素,要后移n-i+1个元素。
14.在无头结点的单向链表中,第一个结点的地址存放在头指针中,而其他结点的存储地址存放在
前趋结点的指针域中。
15.线性表的元素总数不确定,且经常需要进行插入和删除操作,应采用链子存储结构。
16.在线性表中的链式存储中,元素之间的逻辑关系是通过指针决定。
17.在双向链表中,每个结点都有两个指针域,它们一个指向其前趋结点,另一个指向其后继结
点。
18.对一个需要经常进行插入和删除操作的线性表,采用链式存储结构为宜。
19.双向链表中,设P是指向其中待删除的结点,则需要执行的操作为p->prior->next=p->next:
p->next->prior=p->prior
20.在如图所示的链表中,若在指针P所在的结点之后插入数据域值为a和b的两个结点,则可用语
句S->next->next=p->next和P->next=S;来实现该操作。
p
s
三、选择题
1.在具有n个结点的单向链表中,实现(A)的操作,其算法的时间复杂度都是0(n).
A.遍历链表或求链表的第i个结点B.在地址为P的结点之后插入一个结点
C.删除开始结点D.删除地址为P的结点的后继结点
2.设a、b、c为3个结点,p、10、20分别代表它们的地址,则如下的存储结构称为(B)。
B.单向链表
3.
4.
A.循环链表
单向链表的存储密度(
A.大于1B.等于1
已知一个顺序存储的线性表,设每个结点占
的地址为(A)o
A.B+(i-1)Xm
C)。
B.B+iXm
5.
6.
7.
8.
9.
C.双向循环链表
D.双向链表
D.不能确定
m个存储单元,若第一个结点的地址为B,则第
C.小于1
C.B-iXm
在有n个结点的顺序表上做插入、删除结点运算的时间复杂度为(
A.O
(1)B.O(n)C.O(n2)
设front、rear分别为循环双向链表结点的左指针和右指针,贝U指针
元素的条件是(D)o
A.P==LB.P->front==L
两个指针P和Q,分别指向单向链表的两个元素,
A.P->next==Q->nextB.P->next==Q
用链表存储的线性表,其优点是(C)o
A.便于随机存取B.花费的存储空间比顺序表少
C.便于插入和删除D.数据元素的物理顺序与逻辑顺序相同
在单链表中,增加头结点的目的是(C)o
A.使单链表至少有一个结点
C.方便运算的实现
D.B+(i+1)Xm
B)。
D.O(log2n)
P所指的元素是双循环链表
D.P->rear==L
旦
i个结点
L的尾
C.P==NULL
P所指元素是Q所指元素前驱的条件疋
C.Q->next==PD.P==Q
10.下面关于线性表的叙述中,错误的是(A.顺序表必须占一片地址连续的存储单元
C.链表不必占用一片地址连续的存储单元
11.L是线性表,已知LengthList(L)的值是
A.2B.3
12.单向链表的示意图如下:
B.标志表中首结点的位置
D.说明该单链表是线性表的链式存储结构
D)关系。
B.
D.
5,经
顺序表可以随机存取任链表可以随机存取任一
DelList(L,2)运算后,LengthList(L)的值是(C)。
C.4D.5
一元素
元素
C.Q
D.R
D.(n+1)/2
D.双向循环链表
D.基地址和结点大小
D.O(log2n)
D•所需空间与线性表成正比
指向链表Q结点的前驱的指针是(B)。
A.LB.P
13.设p为指向单循环链表上某结点的指针,则*p的直接前驱(C)。
A.找不到B.查找时间复杂度为0
(1)
C.查找时间复杂度为O(n)D.查找结点的次数约为n
14.等概率情况下,在有n个结点的顺序表上做插入结点运算,需平均移动结点的数目为(8)。
A.nB.(n-1)/2C.n/2
15.在下列链表中不能从当前结点出发访问到其余各结点的是(C)。
A.双向链表B.单循环链表C.单向链表
16.在顺序表中,只要知道(D),就可以求出任一结点的存储地址。
A.基地址B.结点大小C.向量大小
17.在双向链表中做插入运算的时间复杂度为(A)。
A.O
(1)B.O(n)C.O(n2)
18.链表不具备的特点是(A)。
A•随机访问B不必事先估计存储空间C.插入删除时不需要移动元素
19.以下关于线性表的论述,不正确的为(C)。
A.线性表中的元素可以是数字、字符、记录等不同类型B.线性顺序表中包含的元素个数不是任意的
C.线性表中的每个结点都有且仅有一个直接前驱和一个直接后继
D.存在这样的线性表,即表中没有任何结点
20.在(B)的运算中,使用顺序表比链表好。
A•插入B.根据序号查找C•删除D.根据元素查找
第3章栈
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
、
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
三、
1.
2.
3.
4.
判断题
栈是运算受限制的线性表。
(V)
在栈空的情况下,不能作出栈操作,否则产生下溢。
(V)
栈一定是顺序存储的线性结构。
(X)
栈的特点是“后进先出”。
(V)
空栈就是所有元素都为0的栈。
(X)
在C(或C++)语言中设顺序栈的长度为MAXLEN,则top=MAXLEN时表示栈满。
(X)
链栈与顺序栈相比,其特点之一是通常不会出现栈满的情况。
(V)
一个栈的输入序列为:
A,B,C,D,可以得到输出序列:
C,A,B,D。
(X)
递归定义就是循环定义。
(X)
将十进制数转换为二进制数是栈的典型应用之一。
(V)
填空题
在栈结构中,允许插入、删除的一端称为栈顶。
在顺序栈中,当栈顶指针top=-1时,表示栈空。
在有n个元素的栈中,进栈操作时间复杂度为0
(1)。
在栈中,出栈操作时间复杂度为O
(1)。
已知表达式,求它的后缀表达式是栈的典型应用。
在一个链栈中,若栈顶指针等于NULL,则表示栈空。
向一个栈顶指针为top的链栈插入一个新结点*p时,应执行p->next=top;top=p;操作。
顺序栈S存储在数组S->data[0…MAXLEN-1]中,进栈操作时要执行的语句有:
S->top+j。
(或
S->top+1)
S->data[S->top]=x
链栈LS,指向栈顶元素的指针是LS->next。
从一个栈删除元素时,首先取出栈顶元素,然后再移动栈顶指针。
由于链栈的操作只在链表的头部进行,所以没有必要设置头结点。
已知顺序栈S,在对S进栈操作之前首先要判断栈是否满。
已知顺序栈S,在对S出栈操作之前首先要判断栈是否空。
若在空间充足,链栈可以不定义栈满运算。
链栈LS为空的条件是LS->next=NULL。
链栈LS的栈顶元素是链表的元素。
同一栈的各元素的类型相同。
若进栈的次序是A、B、C、D、E,执行3次出栈操作以后,栈顶元素为B。
A+B/C-D*E的后缀表达式是ABC/+DE*-。
4个元素A、B、C、D顺序进S栈,执行两次Pop(S,x)运算后,x的值是C
选择题
插入和删除操作只能在一端进行的线性表,称为(C)。
A.队列B.循环队列C.栈D.循环栈
设有编号为1,2。
3,4的4辆列车,顺序进入一个栈结构的站台,下列不可能的出站顺序为(D)。
A.1234B.1243
如果以链表作为栈的存储结构,则出栈操作时(
A•必须判别栈是否满B.必须判别栈是否为空
元素A、B、C、D依次进栈以后,栈顶元素是(
A.AB.B
C.1324D.1423
B)。
C.必须判别栈元素类型D•栈可不做任何判别
D)
C.CD.D
5.
6.
7.
顺序栈存储空间的实现使用(B)存储元素。
A.链表B.数组
在C(或C++)
A.已固定
带头结点的链栈
LS
C.循环链表语言中,一个顺序栈一旦被声明,其占用空间的大小(
B.不固定C.可以改变
LS的示意图如下,栈顶元素是(A)。
D.变量
A)。
D.动态变化
D.
D
8.
9.
A.AB.B
链栈与顺序栈相比,有一个比较明显的优点是(
A.插入操作更加方便B.通常不会出现栈满的情况
从一个栈顶指针为top的链栈中删除一个结点时,用
C.C
)。
C.不会出现栈空的情况
x保存被删除的结点,应执行下列(
D.删除操作更加方便
d)命令。
10.
11.
12.
A.x=top;top->next;B.top=top->next;x=top->data
C.x=top->data;D.x=top->data;top=top->next
在一个栈顶指针为HS的链栈中,将一个S指针所指的结点入栈,应执行下列(
A.HS->next=SB.S->next=HS->next;HS->next=S;
C.S->next=HS->next;HS=S;D.S->next=HS=HS->next
4元素按A、B、C、D顺序进S栈,执行两次Pop(S,x)运算后,栈顶元素的值是(
A.AB.BC.C
元素A、B、C、D依次进栈以后,栈底元素是(
13.
14.
15.
16.
17.
18.
19.
A)。
A.AB.BC.C
经过下列栈的运算后,再执行ReadTop(s)的值是(A)。
InitStack(s);Push(s,a);Push(s,b);Pob(s);
A.a
经过下列栈的运算后,
InitStack(s)(初始化栈)
A.a
经过下列栈的运算后,
InitStack(s)(初始化栈)
A.a
B.b
x的值是(
;Push(s,
B.b
x的值是(
B)。
a);Push(s,
B)。
C.1
D.0
B)命令。
b);ReadTop(s);
C.1
Pob(s,
x);
D.0
;Push(s,a);Pob(s,x);Push(s,b);Pob(s,
B.bC.1
C)。
x);
D.0
经过下列栈的运算后,SEmpty(s)的值是(
InitStack(s)(初始化栈);Push(s,a);Push(s,b);Pob(s,x);Pob(s,A.aB.b
向顺序栈中输入元素时(B)。
A.先存入元素,后移动栈顶指针
C.谁先谁后无关紧要初始化一个空间大小为
A.0
设有一个入栈的次序
A.EDCBA
5的顺序栈
B.-1
S后,
x);
C.1
D.0
B.先移动栈顶指针,
D.同时进行
S->top的值是(B)。
C.不再改变
后存入元素
A、B、C、D、E,则栈不可能的输出序列是(
B.DECBAC.DCEAB
D.动态变化)。
设有一个顺序栈S,元素A、B、C、D、E、F依次进栈,如果6个元素出栈的顺序是A,则栈的容量至少应是(
A.3
A)。
B.4
C.5
D.ABCDE
B、D、C、F、E、
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
、
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
三、
1.
2.
3.
第4章队列
判断题
队列是限制在两端进行操作的线性表。
(V)
判断顺序队列为空的标准是头指针和尾指针都指向同一个结点。
(V)
在链队列上做出队操作时,会改变front指针的值。
(X)
在循环队列中,若尾指针rear大于头指针front,其元素个数为rear-front。
(V)
在单向循环链表中,若头指针为h,那么p所指结点为尾结点的条件是p=h。
(X)
链队列在一定围不会出现队满的情况。
(V)
在循环链队列中无溢出现象。
(X)
栈和队列都是顺序存储的线性结构。
(X)
在队列中允许删除的一端称为队尾。
(X)
顺序队和循环队关于队满和队空的判断条件是一样的。
(X)
填空题
在队列中存取数据应遵循的原则是先进先出。
队列是被限定为只能在表的一端进行插入运算,在表的另一端进行删除运算线性表。
在队列中,允许插入的一端称为队尾。
在队列中,允许删除的一端称为队首(或队头)。
队列在进行出队操作时,首先要判断队列是否为空。
顺序队列在进行入队操作时,首先在判断队列是否为满。
顺序队列初始化后,初始化后,front=rear=-1。
解决顺序队列“假溢出”的方法是采用循环队列。
循环队列的队指针为front,队尾指针为rear,则队空的条件为front==rear。
链队列LQ为空时,LQ->front->next=NULL。
设长度为n的链队列用单循环表表示,若只设头指针,则入队操作的时间复杂度为0(n)。
设长度为n的链队列用单循环表表示,若只设尾指针,则入队操作的时间复杂度为0
(1)。
在一个链队列中,若队首指针与队尾指针的值相同,则表示该队列为空。
设循环队列的头指针front指向队首元素,尾指针rear指向队尾元素后的一个空闲元素,队列的最大
空间为MAXLEN,则队满标志为front==(rear+1)%MAXLEN。
在一个链队列中,若队首指针为front,队尾指针为rear,则判断队列只有一个结点的条件为front=
=rear或front!
。
向一个循环队列中插入元素时,首先要判断队尾指针,然后再向指针所指的位置写入新的数据。
读队首元素的操作不改变或不影响队列元素的个数。
设循环队列的容量为40(序号0〜39),现经过一系列的入队和出队的运算后,front=11,rear=19,
则循环队列中还有8个元素。
队列Q,经过下列运算:
InitQueue(Q)(初始化队列);InQueue(Q,a);InQueue(Q,b);OutQueue(Q,x);ReadFront(Q,x);QEmpty(Q);后的值是8。
队列Q经过InitQueue(Q)(初始化队列);InQueue(Q,a);InQueue(Q,b);ReadFr