#include <stdio.h>
#define M 1000
typedef char ElemType;
typedef struct //定义一个双端顺序栈
{
ElemType data[M];//栈区
int top[2];//top[0]和top[1]分别为两个栈顶指示器
} SeqStack;
void InitStack(SeqStack *s)//创建一个双端顺序栈
{
s->top[0]=-1;
s->top[1]=M;
}
bool Push(SeqStack *s, char x,int i)//进栈操作,把数据元素x压入i号栈
{
if(s->top[0]+1==s->top[1])//栈已满
return false;
switch(i)
{
case 0://0号栈
s->top[0]++;
s->data[s->top[0]]=x;
break;
case 1://1号栈
s->top[1]--;
s->data[s->top[1]]=x;
break;
default://参数错误
return false;
}
return true;
}
bool Pop(SeqStack *s,char *x,int i) //出栈操作,从i号栈中弹出栈顶元素并送到x中
{
switch(i)
{
case 0://0号栈出栈
if(s->top[0]==-1)
return false;
*x=s->data[s->top[0]];
s->top[0]--;
break;
case 1://1号栈出栈
if(s->top[1]==M)
return false;
*x=s->data[s->top[1]];
s->top[1]++;
break;
default://参数错误
return false;
}
return true;
}
int main(void)
{
SeqStack Seq;
SeqStack *s=&Seq;
ElemType a;
ElemType *e=&a;
InitStack(s);
printf("a进栈0\n");
Push(s,'a',0);
printf("b进栈1\n");
Push(s,'b',1);
printf("c进栈0\n");
Push(s,'c',0);
printf("d进栈1\n");
Push(s,'d',1);
printf("出栈次序:\n");
while(Pop(s,e,0))
printf("%c ",a);
printf("\n");
while(Pop(s,e,1))
printf("%c ",a);
printf("\n");
return 0;
}
双端顺序栈基本操作
最新推荐文章于 2022-04-06 16:25:07 发布