考研算法真题
把它转过来。
——懒得写。
似乎两个栈共用一个存储空间,栈顶指针只能从两端开始(有点像队列)。
设两个栈分别为s0,S1,S1的初始栈顶指针为-1,s2的初始栈顶指针为n。
typedef结构
{
elem type stack[N];//堆栈存储空间
int top[2];//top是两个栈顶指针。
} St
ST s;//s是操作的全局变量。
Voidpush (int i,element type e)//堆栈入口操作,其中I代表堆栈的编号,e是堆栈入口元素。
{
如果(我!= 0 | |我!= 1)exit(0);//堆栈编号不正确
if(s . top[1]-s . top[0]= = 1)//栈满。
{
printf("满!");
返回;
}
if(I = = 0)s . tack[++ s . top[0]]= e;//s0放入堆栈
if(I = = 1)s . tack[-s . top[1]]= e;//s1到堆栈中
}
空弹出(int i,elemtype & ampE)//栈操作,其中I代表栈的编号,E是栈元素。
{
如果(我!= 0 | |我!= 1)exit(0);//堆栈编号不正确
如果(i==0)
{
if(s . top[0]=-1)//堆栈s0为空。
{
printf("空的!");
返回;
}
else e = s . stack[s . top[0]-];//s0堆栈
}
if(i==1)
{
if(s . top[1]= = N)//stack s 1为空。
{
printf("空的!");
返回;
}
else e = s . stack[s . top[1]++];//s1弹出堆栈
}
}