目录
- 1. 将5个字母“ooops”按此顺序入栈,则有( )种不同的出栈顺序可以仍然得到"ooops”"( )。
- 2. 对于一个栈,给出输入项A,B,C,D,如果输入项序列为A,B,C,D,试给出全部可能的输出序列。
- 3. 若一个栈的输入序列为1,2,3,……n,输出序列的第一个元素是i,则第j个输出元素是( ).
- 4. 设有n个元素进栈序列是P1,P2, P3,... Pn,其输出序列是1,2,3, .... n,若P3=3,则P1的值( )。
- 5. 已知一个栈的进栈序列是1,2,3,…,n,其输出序列是p1,p2,…,pn,若p1=n,则pi的值______。
- 6. 一个顺序栈S,其栈顶指针为top,则将元素e入栈的操作是( )。
- 共享栈
- 1. 为了减小栈溢出的可能性,可以让两个栈共享一片连续的存储空间,两个栈的栈底分别设在这片空间的两端,这样只有当( )时才可能产生上溢。
- 2. 链栈_向一个栈顶指针为top的链栈中插入一个x的结点,则执行(C)
- 2. 如果以链表作为栈的存储结构,则退栈操作时( )。
- 3. 向一个带头结点HS的链栈中插入一个s所指结点时需执行( )。
- 3. 有关链栈的叙述中正确的是______。
- 双端队列
- 1. 若以1234作为双端队列的输入序列,既不能由输入受限的双端队列得到,也不能由输出受限的双端队列得到的输出序列的是( )
- 3. 已知输入序列为abed,经过输出受限的双端队列后能得到的输出序列是( )。
- 链队
- 1. `▶`若用单链表来表示队列,则应该选用( )
- 3. 用链接方式存储的队列,在进行删除运算时,下面正确的是( )。
- 4. 以下各种存储结构中,最适合用作链队的链表是( )
- 6. 以数组Q[0.. .m- 1]存放循环队列中的元素,若变量front和qulen分别指示循环队列中队头元素的实际位置和当前队列的长度,则队尾元素的实际位置是( )
- 7. 在一个顺序循环队列中删除元素时,首先需要( )
- 5. 在一个链队列中,front和rear分别为头指针和尾指针,则插入一个结点s的操作为( )。
- 栈顶指针不同,进出栈错题
- 1. 若一个栈元素用数组data[1..n]存储,初始栈顶指针top为n,则以下元素x进栈最适合的操作是______。
- 2. 若一个栈元素用数组data[1..n]存储,初始栈顶指针top为n,则以下元素x出栈最适合的操作是______。
- 3. 若一个栈元素用数组data[1..n]存储,初始栈顶指针top为0,则以下元素x进栈最适合的操作是______。
- 4. 若一个栈元素用数组data[1..n]存储,初始栈顶指针top为0,则以下出栈元素x最适合的操作是______。
- 循环队列错题
1. 将5个字母“ooops”按此顺序入栈,则有( )种不同的出栈顺序可以仍然得到"ooops”"( )。
A.1
B.3
C.5
D.6
解析:
此题可以首先列出所有可能的出栈顺序,然后列出各个出战顺序的结果,计数即可。
然后我就准备要列出来,也就发现了卡特兰数
是一种经典的组合数,其前几项为 : 1, 2, 5, 14, 42,42项
5种。要得到ooops,ps固定的 所以看000有几种出栈方式即可。
2. 对于一个栈,给出输入项A,B,C,D,如果输入项序列为A,B,C,D,试给出全部可能的输出序列。
14种
A先出:
(1)A先出基础上B出有:ABCD、ABDC
(2)A先出基础上C出有:ACBD、ACDB
(3)A先出基础上D出有:ADCB
B先出:BACD、BADC、BCAD、BCDA、BDCA
C先出:CBAD、CBDA、CDBA
D先出:DCBA
3. 若一个栈的输入序列为1,2,3,……n,输出序列的第一个元素是i,则第j个输出元素是( ).
A. 1-j-1
B. i-j
C. j-i+ 1
D.不确定
解析:
栈是一种后进先出的线性表结构,但本题无法确定输入和输出的时间顺序,即不一定是在所有元素输入栈后再进行输出。
4. 设有n个元素进栈序列是P1,P2, P3,… Pn,其输出序列是1,2,3, … n,若P3=3,则P1的值( )。
A.可能是2
B.一定是2
C.不可能是1
D.一定是1
解析:
进栈序列是P1,P2,P3, … Pn,当P3= 3时,由输出序列可知,只有以下两种情况: P1进栈后出栈中,P2进栈后出栈,或P1、P2都进栈然后出栈, 因此P1的值可能为1,也可能为2
5. 已知一个栈的进栈序列是1,2,3,…,n,其输出序列是p1,p2,…,pn,若p1=n,则pi的值______。
A. i
B. n-i
C. n-i+1
D. 不确定
6. 一个顺序栈S,其栈顶指针为top,则将元素e入栈的操作是( )。
A. *S->top=e;S->top++;
B. S->top++;*S->top=e;
C. *S->top=e
D. S->top=e;
A
共享栈
1. 为了减小栈溢出的可能性,可以让两个栈共享一片连续的存储空间,两个栈的栈底分别设在这片空间的两端,这样只有当( )时才可能产生上溢。
A. 两个栈的栈顶在栈空间的某一位置相遇
B. 其中一个栈的栈顶到达栈空间的中心点
C. 两个栈的栈顶同时达到栈空间的中心点
D. 两个栈均不为空,且一个栈的栈顶到达另一个栈的栈底。
2. 链栈_向一个栈顶指针为top的链栈中插入一个x的结点,则执行(C)
2. 如果以链表作为栈的存储结构,则退栈操作时( )。
A. 必须判别栈是否满
B. 对栈不做任何判别
C. 判别栈元素的类型
D. 必须判别栈是否为空
3. 向一个带头结点HS的链栈中插入一个s所指结点时需执行( )。
A. HS->next=s;
B. s->next= HS->next; HS->next=s;
C. s->next=HS;HS=s;
D. s->next=HS;HS = HS->next;
解析:
为了将结点s插入到带头结点HS的链栈中,首先需要修改s的指针域,
使得s的下一个结点为链栈中的第一个有效结点,即数据域中存放有效数据的结点,
该结点可由HS的指针域获得,因此相应的语句为s->next=HS->next,
之后使s结点成为链栈中的第一个有效结点,
即HS的指针域指向s,相应的语句为HS->next= s。
3. 有关链栈的叙述中正确的是______。
A. 链栈在进栈操作时一般不需要考虑上溢出
B. 链栈在出栈操作时一般不需要考虑下溢出
C. 链栈和顺序栈相比的缺点是不能随机访问栈中元素
D. 以上都不对
链栈特点是动态申请内存空间,只要内存空闲空间够,就可以一直申请下去,所以出现上溢的情况很少,这是它的优点。
双端队列
1. 若以1234作为双端队列的输入序列,既不能由输入受限的双端队列得到,也不能由输出受限的双端队列得到的输出序列的是( )
A. 4213
B. 4231
C. 4132
D. 1234
3. 已知输入序列为abed,经过输出受限的双端队列后能得到的输出序列是( )。
A.dacb
B. cadb
C. dbca
D.以上答案都不对
输出受限的双端队列是指删除限制在一端进行,而插入允许在两端进行的队列。
链队
1. ▶
若用单链表来表示队列,则应该选用( )
A.带尾指针的非循环链表找不到头,不好出队
B.带尾指针的循环链表
C.带头指针的非循环链表找不到尾,不好入队
D.带头指针的循环链表从头循环到尾,入队
A
3. 用链接方式存储的队列,在进行删除运算时,下面正确的是( )。
A.仅修改头指针
B.仅修改尾指针
C.头、尾指针都要修改
D.头、尾指针可能都要修改
链队列中删除元素一般仅修改队头指针。 但只有一个元素时,出队后队空 ,此时需要修改队尾指针。
4. 以下各种存储结构中,最适合用作链队的链表是( )
A.带队首指针和队尾指针的循环单链表
B.带队首指针和队尾指针的非循环单链表
C.只带队首指针的非循环单链表
D.只带队首指针的循环单链表
链队的定义就是带有队头指针和队尾指针的单链表。 因为队列的入队和出队操作都在端点进行。即在队首和队尾进行。所以带队首指针和队尾指针的非循环单链表最适合用作链队的链表。
6. 以数组Q[0… .m- 1]存放循环队列中的元素,若变量front和qulen分别指示循环队列中队头元素的实际位置和当前队列的长度,则队尾元素的实际位置是( )
A.front + qulen - 1
B. (front + qulen) % m
C. (front + qulen - 1)% m
D.front + qulen
循环队列的元素顺序存储在数组Q中,已知循环队列中队头元素的存储位置为front。当前队列的长度为qulen,队尾元素的位置要在front上加上qulen,然后减1 (第一个元素存储在front的位置上),对于循环队列求队尾的位置还要对总长度求余,所以队尾元素的实际位置为(front + qulen- 1]) MOD m。
7. 在一个顺序循环队列中删除元素时,首先需要( )
A.前移队首指针
B.后移队首指针
C.取出队首指针所指位置上的元素
D. 取出队尾指针所指位置上的元素
5. 在一个链队列中,front和rear分别为头指针和尾指针,则插入一个结点s的操作为( )。
A. front=front->next
B. s->next=rear;rear=s
C. rear->next=s;rear=s;
D. s->next=front;front=s;
先修改指针,再赋值
栈顶指针不同,进出栈错题
1. 若一个栈元素用数组data[1…n]存储,初始栈顶指针top为n,则以下元素x进栈最适合的操作是______。
A. top++; data[top]=x;
B. data[top]=x; top++;
C. top–; data[top]=x;
D. data[top]=x; top–;
感觉应该选C,先操作指针
2. 若一个栈元素用数组data[1…n]存储,初始栈顶指针top为n,则以下元素x出栈最适合的操作是______。
A. x=data[top]; top++;
B. top++; x=data[top];
C. x=data[top]=x; top–;
D. top–; x=data[top];
3. 若一个栈元素用数组data[1…n]存储,初始栈顶指针top为0,则以下元素x进栈最适合的操作是______。
A. top++; data[top]=x;
B. data[top]=x; top++;
C. top–; data[top]=x;
D. data[top]=x; top–;
4. 若一个栈元素用数组data[1…n]存储,初始栈顶指针top为0,则以下出栈元素x最适合的操作是______。
A. x=data[top]; top–;
B. x=data[top]; top++;
C. top–; x=data[top];
D. top++; x=data[top];
3,4题理解。1,2题不理解。
循环队列错题
-
已知循环队列存储在一维数组A[0…n-1]中,且队列非空时front和rear分别指向队头元素和队尾元素。若初始时队列空,且要求第一个进入队列的元素存储在A[0]处,则初始时front和rear的值分别是______。
A. 0,0
B. 0,n-1
C. n-1,0
D. n-1,n-1 -
设循环队列qu中数组data的下标是0~N-1,其队头、队尾指针分别为f和r(f指向队首元素的前一位置,r指向队尾元素),元素x出队的操作是______ ; x=qu.data[qu.f]。
A. qu.r++
B. qu.r=(qu.r+1)%N
C. qu.f++;
D. qu.f=(qu.f+1)%N -
设数组ta[m]作为循环队列SQ的存储空间,front为队头指针,rear为队尾指针,则执行出队操作后其头指针front的值为( )。
A.front= front + 1
B.front= (front+ 1)%(m- 1)
C.front= (ront- 1) %om
D.front= (front+ 1)%M
对于循环队列出队的操作就是队头指针后移,即+1。但对于循环队列要对队列长度求余才能得到指针的位置。具体的操作语句为front= (front + 1) %m。