一个关于进栈的选择题?
14. 若一个栈以向量V[1..n]存储,初始栈顶指针top为n+1,则下面x进栈的正确操作是( )。
A.top:=top+1; V [top]:=x B. V [top]:=x; top:=top+1
C. top:=top-1; V [top]:=x D. V [top]:=x; top:=top-1
[解决办法]
栈顶指针为n+1,则第一个进栈的数值放在n处,故先要-1,让栈顶指针指向n处,在将数值进栈
[解决办法]
注意该栈的存储区为v[1,2.....n],而top的初值为n+1,如果top++的话top = n+2,即v
[n+2]根本不在栈的存储区. 它的入栈过程是
top--;
v[n] = x; 入站
top--;
v[n-1] = x; 入站
.
.
.
v[2] = x;
top--;
v[1] = x;
我不太会讲不知道楼主明白不。
[解决办法]
弄清楚栈的结构:X86 为地址向下生长型。
即:n+1处是栈底,1...n在n+1的上面,这样的结构。入栈是先修改栈顶指针,所以要减,然后数据入栈。
C符合。
反之,出栈就是先弹出数据,再修改栈顶指针。
[解决办法]
首先,top指针指向的是栈顶的元素。一开始栈为空,top指针指向n+1,当有一元素入栈之后,当然应该将top指针上移,然后将元素放到top指针所指的存储单元中。