- 分享至
-
加入QQ群享真题
546357334
21计算机考研群 -
关注公众号得干货
启航计算机考研
栈的存储与操作
由于栈是一个特殊的表,可以用一维数组来实现栈。同时设立指针t(称为栈顶指针)来指示栈顶元素的当前位置。
我们用一个数组s[1..m]来表示一个栈时,将栈底固定在数组的底部,即s[1]为最早入栈的元素,并让栈向数组上方(下标增大的方向)扩展。当t=0时,表示这个栈为一个空栈。当t=m时,表示这个栈已满。
可以用下列方式定义栈:
const
m=栈表目数的上限;
type
stack=array[1..m] of stype; {栈的数据类型}
var
s:stack;
t:integer; {栈顶指针}
进栈、出栈操作的过程和函数(假设栈元素的数据类型为整型):
(1)进栈过程(push)
①若t≥m时,则给出溢出信息,作出错处理(进栈前首先检查栈是否已满,满则溢出;不满则作②);
②置t=t+1(栈指针加1,指向进栈地址);
③S(t)=x,结束(x为新进栈的元素);
procedure push(var s:stack; x:integer;var t:integer);
begin
if t=m then writeln('overflow')
else
begin
t:=t+1;s[t]:=x;
end
end;
(2)退栈函数(pop)
①若t≤0,则给出下溢信息,作出错处理(退栈前先检查是否已为空栈, 空则下溢;不空则作②);
②x=s(t),(退栈后的元素赋给x);
③t=t-1,结束(栈指针减1,指向栈顶)。
function pop(var s:stack;var t:integer):integer;
begin
if t=0 then writeln('underflow')
else
begin
pop:=s[t];t:=t-1;
end
end;
(3)读栈顶元素函数(top)
function top(var s:stack; t:integer):integer;
begin
if t=0 then writeln('underflow')
else
top:=s[t];
end;
【考研党必备学习资料包】:考研真题+免费择校择专业+免费考研复习规划,更有考研课程优惠券等你来加购~名额有限立即领取【领取链接】
【启航教育考研辅导课程推荐】:面授课集训营(冲刺密训,十一特训),专业课一对一辅导,考研网课全程班包含公共课以及专业课,这些课程中都会配有内部讲义以及辅导书和资料,同时会有教研教辅双师模式对大家进行教学以及督学,并配有24小时答疑和模拟测试等,具体详情可直接咨询在线客服老师。