系列文章目录
波波的数据结构属实上的快,这里将会写些pta的解析,算是复习 预习,帮助我与大家期末不挂科
栈
一、选择题
2-1
若顺序栈的栈顶指针指向栈顶元素位置,则压入新元素时,应( A)。
A.先移动栈顶指针
B.先存入元素,再移动栈顶指针
C.先后次序无关紧要
D.同时进行
解析:看书上代码易得,顺序栈实际上是在结构体中定义一个数组,栈顶指针是数组的下标,下标加一后数组存入一个元素
2-2
链式栈与顺序栈相比,一个比较明显的优点是( B)。
A.插入操作更加方便
B.通常不会出现栈满的情况
C.不会出现栈空的情况
D.删除操作更加方便
解析:链式栈是在表头进行操作,顺序栈要先定义一个数组,会出现栈满的情况
2-3
若(a-b)(c+d)是中序表达式,则其后序表达式是( B)。
A.abcd+-
B.ab-cd+*
C.ab-cd+
D.a-bcd+
解析:后序表达式是遇到数字纳入栈,遇到运算符后取出栈顶的两个数字进行运算,结果再纳入栈,至于如何将中序表达式,我们可以先将括号内的运算符移到对应的右括号,再将括号移除。
2-4
字符A,B,C依次进入一个栈,按出栈的先后顺序组成不同的字符串,则至多可以组成(B )个不同的字符串。
A.14
B.5
C.6
D.8
解析:因为不可能出现CAB这一字符串 所以6-1个
2-5
下列算法的功能是(B)。
void func( )
{
int x;
Statck s; //定义栈s
cin >> x;
while (x<>0)
{
push(s,x);
cin>>x;
}
while (!EmptyStack(s))
cout << pop(s);
}
A.以读入数据的相同顺序输出数据
B.以读入数据的相反顺序输出数据
C.将数据读入到栈中进行保存
D.读入一批数据到栈中进行求和并输出
解析:push(s,x)将x值纳入栈,pop(s)将栈顶的元素弹出
2-6
若已知一个栈的进栈序列是1,2,3,…,n,其输出序列为p1,p2,p3,…,pn,若p1 = 3,则p2为(A)。
A.可能是2
B.一定是2
C.可能是1
D.一定是1
解析:因为p1=3,所以1,2先纳入栈,2一定比1先出栈
2-7
栈的插入和删除操作在(A )进行。
A.栈顶
B.栈底
C.任意位置
D.指定位置
2-8
假设一个栈的输入序列是1,2,3,4,则不可能得到的输出序列是( B)。
A.1,2,3,4
B.4,1,2,3
C.4,3,2,1
D.1,3,4,2
解析:和第六题类似
2-9
令P代表入栈,O代表出栈。当利用堆栈求解后缀表达式1 2 3 + * 4 –时,堆栈操作序列是:(D)
A.PPPOOPOO
B.PPOOPPOOPPOO
C.PPPOOPOOPPOO
D.PPPOOPOOPPOOPO
解析:之前说过后序表达式是遇到数字纳入栈,遇到运算符后取出栈顶的两个数字进行运算,结果再纳入栈,123入栈,取出23进行+运算再纳入栈,取出61进行运算
2-10
令P代表入栈,O代表出栈。若利用堆栈将中缀表达式3 * 2+8/4转为后缀表达式,则相应的堆栈操作序列是(C)
A.PPPOOO
B.POPOPO
C.POPPOO
D.PPOOPO
解析:后缀表达式为3284/+ *入栈,然后出栈 +入栈,/入栈,然后分别出栈
2-11
若top为指向栈顶元素的指针,判定栈S(最多容纳m个元素)为空的条件是:(B)
A.S->top == 0
B.S->top == -1
C.S->top != m-1
D.S->top == m-1
解析:栈为空时,栈顶指针位于-1处
2-12
若栈采用顺序存储方式存储,现两栈共享空间V[m]:top[i]代表第i(i=1或2)个栈的栈顶;栈1的底在V[0],栈2的底在V[m-1],则栈满的条件是:(D)
A.|top[2]-top[1]|==0
B.top[1]+top[2]==m
C.top[1]==top[2]
D.top[1]+1==top[2]
解析:当top[1]+1==top[2]时,说明两个栈相邻,共享空间全部占满
2-13
若栈S1中保存整数,栈S2中保存运算符,函数F()依次执行下述各步操作:
(1)从S1中依次弹出两个操作数a和b;
(2)从S2中弹出一个运算符op;
(3)执行相应的运算b op a;
(4)将运算结果压入S1 中。
假定S1中的操作数依次是{ 5, 8, 3, 2 }(2在栈顶),S2中的运算符依次是{ *, -, + }(+在栈顶)。调用3次F()后,S1栈顶保存的值是:(A)
A.-15
B.15
C.-20
D.20
解析 1.a=2,b=3,op=*,3+2=5,2.5-8=-3,3.-3/*5=-15
2-14
设一个栈的输入序列是1、2、3、4、5,则下列序列中,是栈的合法输出序列的是?(A)
A.3 2 1 5 4
B.5 1 2 3 4
C.4 5 1 3 2
D.4 3 1 2 5
解析:和前面题目一样
2-15
给定一个堆栈的入栈序列为{ 1, 2, ⋯, n },出栈序列为{ p1, p2, ⋯, pn}。如果p2 =n,则存在多少种不同的出栈序列?(B)
A.n
B.n−1
C.2
D.1
解析:p1有n-1种可能
2-16
若已知一个进栈序列是1,2,3,……,n,其输出序列是p1,p2,p3,……pn, 若p1=n, 则pi(1<i<n)为(C )。
A.i
B.n-i
C.n-i+1
D.不确定
解析:相当于倒序输出进栈序列
这里暂时只能给出选择题的解析,函数部分请看书上的代码