数据结构之共享栈

来源:互联网 发布:苹果4s有4g网络吗 编辑:程序博客网 时间:2024/06/11 08:50

数据结构之共享栈
两个栈的栈底为一维数组的两端。
栈0的栈底为-1
栈1的栈底为n
判断栈满的条件为:
两个栈的栈顶相差1

#include<stdio.h>#include<stdbool.h>#define maxsize 20#define ElemType inttypedef struct{    int stack[maxsize];    int top[2];}stk;stk s;//------------------------入栈---------------------------int push(int i,int x)     //   i代表共享栈的栈号,x表示入栈元素{    if(i<0||i>1)    {        printf("栈号输入错误!\n");        return 0;    }    if((s.top[1]-s.top[0])==1)    {        printf("栈满!\n");        return 0;    }    switch(i)    {        case 0:s.stack[++s.top[0]]=x;               return 1;               break;        case 1:s.stack[--s.top[1]]=x;               return 1;               break;    }}//push//-------------------退栈---------------int pop(int i){    if(i<0||i>1)    {        printf("栈号输入错误!\n");        return 0;    }    switch(i)    {        case 0:            if(s.top[0]==-1)                {                    printf("栈空\n");                    return 0;                }            return s.stack[s.top[0]--];        case 1:            if(s.top[1]==maxsize)            {                printf("栈空\n");                return 0;            }           return s.stack[s.top[1]++];    }}//pop//----------------------打印相应的栈------------------------void print(){    int j=0;    for(j=0;j<maxsize;j++)    {        printf("%d ",s.stack[j]);    }    printf("\n");}int main(){    s.top[0]=-1;    s.top[1]=maxsize;    int i=0;    i=push(0,1);    if(i==1)        printf("成功向栈0压入元素!\n");    print();     i=push(0,3);    if(i==1)        printf("成功向栈0压入元素!\n");    print();    i=push(1,2);    if(i==1)        printf("成功向栈1压入元素!\n");    print();      i=push(1,4);    if(i==1)        printf("成功向栈1压入元素!\n");    print();    i=pop(0);        printf("删除栈0元素%d!\n",i);    i=pop(1);        printf("删除栈1元素%d!\n",i);}

运行结果:
这里写图片描述

原创粉丝点击