一、单项选择题
01.栈和队列具有相同的( B ).
A.抽象数据类型 B.逻辑结构 C.存储结构 D.运算
解析:栈和队列的逻辑结构是相同的,都属于线性结构,只是它们对数据的运算不同
02.栈是一种(C ).
A.顺序存储的线性结构 B.链式存储的非线性结构
C.限制存取点的线性结构 D.限制存储点的非线性结构
解析:栈也是一种线性表,按存储结构的不同可以分为顺序栈和链栈
03.下列选项中,( B )不是栈的基本操作。
A.删除栈顶元素 B.删除栈底元素
C.判断栈是否为空 D.将栈置为空栈
04.假定用数组a[n]存储一个栈,初始栈顶指针top=-1,则元素x进栈的操作是( C ).
A. a[--top]=x B. a [top--]=x C. a[++top]=x D. a[top++]=X
解析:数组下标范围为0~n-1,初始时top为-1,第一个元素入栈后,top为0,top指向栈顶元素,栈往高地址方向增长,所以入栈时应先将指针top加1,再存入元素x
05.假定用数组a [ 1...n]存储一个栈,初始栈顶指针top=1,则元素x进栈的操作是( B )
A.data[top--]=x B.data [top++]=x C. data[--top]=x D. data[++top]=x
解析:数组下标为1~n,初始时top为1,表示top指向栈顶元素的下一个元素,栈向高地址方向增长,所以入栈时应先存入元素x,再将指针top加1
06.假定用数组 a [1...n]存储一个栈,初始栈顶指针top=n+1,则元素x进栈的操作是( A )
A. data[--top]=x B.data [top++]=x C. data[top--]=x D. data[++top]=x
解析:数组下标为1~n,初始时top为n+1,表示top指向栈顶元素,栈向低地址方向增长,所以入栈时应先将指针top减1,然后存入元素x
07.设有一个空栈,栈顶指针为1000H,栈向高地址方向增长,每个元素需要一个存储单元,
执行Push、Push、Pop、Push、Pop、Push、Pop、Push 操作后,栈顶指针的值为( A )。
A.1002H B.1003H C.1004H D.1005H
解析:每个元素需要一个存储单元,所以每入栈一次top加1,出栈一次top减1,指针top的值依次为1001H、1002H、1001H、1002H、1001H、1002H、1001H、1002H
08.和顺序栈相比,链栈有一个比较明显的优势,即( A )。
A.通常不会出现栈满的情况 B.通常不会出现栈空的情况
C.插入操作更容易实现 D.删除操作更容易实现
解析:顺序栈采用数组存储,数组的大小是固定的,不能动态的分配大小,和顺序栈相比,链栈的最大优势在于它可以动态的分配存储空间
09.设链表不带头结点且所有操作均在表头进行,则下列最不适合作为链栈的是( C )。
A.只有表头结点指针,没有表尾指针的双向循环链表
B.只有表尾结点指针,没有表头指针的双向循环链表
C.只有表头结点指针,没有表尾指针的单向循环链表
D.只有表尾结点指针,没有表头指针的单向循环链表
解析:对于双向循环链表,不管是表头指针还是表尾指针,都可以很方便地找到表头结点,方便在表头做插入或删除操作。而单循环链表通过尾指针可以很方便地找到表头结点,但通过头指针找尾结点需要遍历一次链表。对于C,插入和删除结点后,找尾结点所需的时间为O(n)。
10.向一个栈顶指针为top的链栈(不带头结点)中插入一个x结点,则执行( C )。
A. top->next=x B.x->next=top->next; top->next=x
C. x->next=top;top=x D.x->next=top; top=top->next
解析:链栈采用不带头结点的单链表表示时,进栈操作在首部插入一个结点:(即x->next=top),插入完后需将top 指向该插入的结点x。
11.链栈(不带头结点)执行Pop操作,并将出栈的元素存在×中,应该执行( D )。
A. x=top; top=top->next B.x=top->data
C. top=top->next; x=top->data D. x=top->data; top=top->next
12.经过以下栈的操作后,变量x的值为( A ).
Initstack(st); Push(st,a); Push(st,b); Pop (st,x); GetTop (st,x);
A. a B.b C.NULL D. false
解析:执行前3句后,栈st内的值为a, b,其中b为栈顶元素;执行第4句后,栈顶元素b出栈,x的值为b;执行最后一句,读取栈顶元素的值,x的值为a。
13.3个不同元素依次进栈,能得到( B )种不同的出栈序列。
A.4 B.5 C. 6 D.7
14.设a, b, c, d,e,f以所给的次序进栈,若在进栈操作时,允许出栈操作,则下面得不到的
出栈序列为( D ).
A. fedcba B. bcafed C. dcefba D. cabdef
解析:根据栈“先进后出”的特点,且在进栈操作的同时允许出栈操作,显然答案D中c最先出栈,则此时栈内必定为a和 b,但因为a先于b进栈,所以要晚出栈。对于某个出栈的元素,在它之前进栈却晚出栈的元素必定是按逆序出栈的,其余答案均是可能出现的情况。
15.4个元素依次进栈的次序为a, b,c,d,则以c, d开头的出栈序列的个数为( A )。
A.1 B.2 C. 3 D.4
解析:假设出栈序列为cd...,分析栈的操作序列: a进栈,b进栈,c进栈,c出栈,d进栈,d出栈,此后只能是b出栈和a出栈一种情况,因此出栈序列只有cdba。
16.用S表示进栈操作,用X表示出栈操作,若元素的进栈顺序是1234,为了得到1342的
出栈顺序,相应的S和X的操作序列为( D ).
A. SXSXSSXX B. SSSXXSXX C. SXSSXXSX D. SXSSXSXX
解析:A的出栈顺序为1243 ,B的出栈顺序为3241,C的出栈顺序为1324。得到1342的出栈序列为:1进,1出,2进,3进,3出,4进,4出,2出
17.若栈的输入序列是1,2,3,…, n,输出序列的第一个元素是n,则第i个输出元素是( D ).
A.不确定 B. n-i C. n-i-1 D. n-i+1
18.若栈的输入序列是1,2,3,… ,n,输出序列的第一个元素是i,则第j个输出元素是( D )。
A. i-j-1 B. i-j C. j-i+1 D、不确定
解析:当第 i个元素第一个出栈时,则i之前的元素可以依次排在i之后出栈,但剩余的元素可以在此时进栈并且也会排在i之前的元素出栈,所以第j个出栈的元素是不确定的。
19.某栈的输入序列为a, b, c,d,下面的4个序列中,不可能为其输出序列的是( C ).
A. a, b, c, d B. c, b,d, a C. d, c, a, b D. a, c, b, d
解析:A可能的顺序是a入,a出,b入,b出,c入,c出,d入,d出。
B可能的顺序是a入,b入,c入,c出,b出,d入,d出,a出。
D可能的顺序是a入,a出,b入,c入,c出,b出,d入,d出。
C没有对应的序列。
20.若栈的输入序列是P1, P2…, Pn,输出序列是1,2,3,…,n,若P3=1,则P1的值( C )
A.可能是2 B.一定是2 C.不可能是2 D.不可能是3
解析:入栈序列是P1, P2;…, Pn。由于P3= 1,即 P1, P2,P3连续入栈后,第一个出栈元素是P3,说明P1,P2已经按序进栈,根据先进后出的特点可知,P2必定在P1之前出栈,而第二个出栈元素是2,而此时P1不是栈顶元素,因此P1的值不可能是2。
21.若栈的输入序列是P1,P2…, Pn输出序列是1,2,3,…, n,若P3=3,则P1的值( A )。
A.可能是2 B.不可能是1 C.一定是1 D.一定是2
解析:假设P1是1,进栈后立即出栈,P2是2,进栈后立即出栈,P3是3,进栈后立即出栈,得到的序列符合题意。假设P1是2,P2是1,P1、P2依次入栈后全部出栈,P3入栈后也出栈,得到的序列也符合题意,所以P1可能是1也可能是2
22.已知栈的入栈序列是1,2,3,4,其出栈序列为P1,P2, P3,P4,则P2P4不可能是( C )。
A.2,4 B.2,1 C.4,3 D.3,4
解析:对于C,P2做为最后一个入栈元素4,则只有P1或P3出栈的元素可能是3,P4不可能是3
23.设栈的初始状态为空,当字符序列“n1_”作为栈的输入时,输出长度为3,且可用做
C语言标识符的序列有( C )个。
A.4 B.5 C. 3 D.6
解析:n1_三个字符组成的标识符,且不能以数字开头,符合条件的只有n1_、n_1、_1n、_n1这四种,第一种n进栈再出栈,1进栈再出栈,_进栈再出栈;第二种n进栈再出栈,1进栈,_进栈,_出栈,1出栈;第三种n进栈,1进栈,_进栈,_出栈,1出栈,n出栈,根据先进后出的特性,_n1不可能出现
24.采用共享栈的好处是( B )。
A.减少存取时间,降低发生上溢的可能 B.节省存储空间,降低发生上溢的可能
C.减少存取时间,降低发生下溢的可能 D.节省存储空间,降低发生下溢的可能
解析:上溢是指存储器满,还往里写;下溢是指存储器空,还往外读。为了解决上溢,可给栈分配很大的存储空间,但这样又会造成存储空间的浪费。共享栈的提出就是为了在解决上溢的基础上节省存储空间,将两个栈放在同一段更大的存储空间内,这样,当一个栈的元素增加时,可使用另一个栈的空闲空间,从而降低发生上溢的可能性。
25.设有一个顺序共享栈Share [0:n-1],其中第一个栈顶指针top1的初值为-1,第二
个栈顶指针top2的初值为n,则判断共享栈满的条件是( A )
A. top2-top1==1 B. top1-top2==1 C. top1==top2 D、都不对
26.【2009统考真题】设栈S和队列Q的初始状态均为空,元素abcdefg依次进入栈S。若
每个元素出栈后立即进入队列Q,且7个元素出队的顺序是bdcfeag,则栈S的容量至少是( C)。
A. 1 B.2 C.3 D.4
27.【2010统考真题】若元素a, b, c, d, e, f依次进栈,允许进栈、退栈操作交替进行,但不
允许连续3次进行退栈操作,不可能得到的出栈序列是( D )。
A. dcebfa B. cbdaef C. bcaefd D. afedcb
解析:A由a进,b进,c进,d进,d出,c出,e进,e出,b出,f进,f出,a出得到;
B由a进,b进,c进,c出,b出,d进,d出,a出,e进,e出,f进,f出得到;
C由a进,b进,b出,c进,c出,a出,d进,e进,e出,f进,f出,d出得到;
D由a进,a出,b进,c进,d进,e进,f进,f出,e出,d出,c出,b出得到,但题意要求不允许连续3次退栈操作,选项D不符。
28.【2011统考真题】元素a, b, c,d,e依次进入初始为空的栈中,若元素进栈后可停留、可出栈,
直到所有元素都出栈,则在所有可能的出栈序列中,以元素d开头的序列个数是( B ).
A.3 B.4 C. 5 D.6
29.【2013统考真题】一个栈的入栈序列为1,2,3,…, n,出栈序列是P1,P2,P3,…, Pm。若P2=3,
则P3可能取值的个数是( C)。
A. n-3 B. n-2 C. n-1 D.无法确定
解析:显然,3之后的4,5,…, n都是P3可取的数(一直进栈直到该数入栈后马上出栈)。接下来分析1和2是否可取:P1可以是3之前入栈的数(可能是1或2),也可以是4,当P1=1时,P3可取2;当P1=2时,P3可取1。因此,P3可能取除3外的所有数,个数为n-1。
30.【2020统考真题】对空栈S进行Push和 Pop操作,入栈序列为a, b,c, d, e,经过Push,
Push、Pop、Push、Pop、Push、Push、Pop操作后得到的出栈序列是( D )
A. b,a, c B. b, a, e C. b, c, a D. b,c,e
31.【2022统考真题】给定有限符号集s, in和out均为S中所有元素的任意排列。对于
初始为空的栈ST,下列叙述中,正确的是( D )。
A.若in是ST的入栈序列,则不能判断out是否为其可能的出栈序列
B.若out是ST的出栈序列,则不能判断in是否为其可能的入栈序列
C.若in是ST的入栈序列,out是对应in的出栈序列,则in与 out一定不同
D.若in是ST的入栈序列,out是对应in的出栈序列,则in与 out可能互为倒序
解析:通过模拟出入栈操作,可以判断入栈序列in和出栈序列out是否合法。因此,已知in序列可以判断out序列是否为可能的出栈序列;已知out序列也可以判断in序列是否为可能的入栈序列,A和B错误。若每个元素入栈后立即出栈,则in序列和out序列相同,C错误。若所有元素都入栈后才依次出栈,则in序列和 out序列互为倒序,D正确。