考研算法真题

把它转过来。

——懒得写。

似乎两个栈共用一个存储空间,栈顶指针只能从两端开始(有点像队列)。

设两个栈分别为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弹出堆栈

}

}