双端顺序栈基本操作

来源:互联网 发布:十一双十一淘宝 编辑:程序博客网 时间:2024/05/14 13:36
#include <stdio.h>#define M 1000typedef 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;}

原创粉丝点击