2023考研计算机阜阳师范学院真题(4)
(1)将编号为0和1的两个栈存放于一个数组空间V[m]中,栈底分别处于数组的两端。当第0号栈的栈指针top[0]等于-1时该栈为空,当第1号栈的栈指针top[1]等于m时该栈为空。两个栈均从两端向中间增长。试编写双栈初始化,判断栈空、栈满、进栈和出栈等算法的函数。双栈数据结构的定义如下:
Typedef struct
{int top[2],bot[2]; //栈和栈底指针
SElemType *V; //栈数组
int m; //栈大可容纳元素个数
}DblStack
[题目分析]
两栈共享向量空间,将两栈栈底设在向量两端,初始时,左栈指针为-1,右栈为m。两栈指针相邻时为栈满。两栈相向、迎面增长,栈指针指向栈元素。
[算法描述]
(1) 栈初始化
int Init()
{S.top[0]=-1;
S.top[1]=m;
return 1; //初始化
}
(2) 入栈操作:
int push(stk S ,int i,int x)
∥i为栈号,i=0表示左栈,i=1为右栈,x是入栈元素。入栈返回1,失败返回0
{if(i<0||i>1){ cout<<“栈号输入不对”<< p="">
if(S.top[1]-S.top[0]==1) {cout<<“栈已满”<< p="">
switch(i)
{case 0: S.V[++S.top[0]]=x; return(1); break;
case 1: S.V[--S.top[1]]=x; return(1);
}
}∥push
(3) 退栈操作
ElemType pop(stk S,int i)
∥退栈。i代表栈号,i=0时为左栈,i=1时为右栈。退栈时返回退栈元素
∥否则返回-1
{if(i<0 i="">1){cout<<“栈号输入错误”<< p="">
switch(i)
{case 0: if(S.top[0]==-1) {cout<<“栈空”<< p="">
else return(S.V[S.top[0]--]);
case 1: if(S.top[1]==m { cout<<“栈空”<< p="">
else return(S.V[S.top[1]++]);
}∥switch
}∥算法结束
(4) 判断栈空
int Empty();
{return (S.top[0]==-1 && S.top[1]==m);
}
[算法讨论]
请注意算法中两栈入栈和退栈时的栈指针的计算。左栈是通常意义下的栈,而右栈入栈操作时,其栈指针左移(减1),退栈时,栈指针右移(加1)。
以上就是关于“2023考研计算机阜阳师范学院真题(4)”的内容,更多计算机研究生真题精彩内容,请持续关注研圣在线考研频道!
研圣考研热门课
1对1考研复习规划指导
热门课程