共享栈基本用法(顺序存储结构)

#include <stdio.h>
#include <stdlib.h>
#define  ElemType int
#define  MAXSIZE  10

typedef struct
{
    ElemType  Stack[MAXSIZE];
    int       Lefttop;
    int       Righttop;
}DUPSQSTACK;

DUPSQSTACK *  InitDupStack(DUPSQSTACK *s);
int           Empty_DupStack(DUPSQSTACK *s);
int           Full_DupStack(DUPSQSTACK *s);
int           Push_DupStack(DUPSQSTACK *s,char status,ElemType x);
int           Pop_DupStack(DUPSQSTACK *s,char status,ElemType x);
int           DestroyDupStack(DUPSQSTACK *s);

DUPSQSTACK * InitDupStack(DUPSQSTACK *s)
{
    s=(DUPSQSTACK *)malloc(sizeof(DUPSQSTACK));
    if(s)
    {
    s->Lefttop=-1;
    s->Righttop=MAXSIZE;
    return s;
    }
    else
    {
        printf("Fail to apply for the memory.\n");
        exit(0);
    }
}


int Empty_DupStack(DUPSQSTACK *s)
{
    return(s->Lefttop==-1&&s->Righttop==MAXSIZE); // if s->Lefttop=-1&&s->Righttop=MAXSIZE,return 1;
}

int Full_DupStack(DUPSQSTACK *s)
{
    return(s->Lefttop+1==s->Righttop);
}

int Push_DupStack(DUPSQSTACK *s,char status,ElemType x)
{
    if(!Full_DupStack(s))
    {
      if('L'==status)
      {
         s->Stack[++s->Lefttop]=x;
         printf("enter  the left stack element :  %d\n",s->Stack[s->Lefttop]);
         return 0;
      }
      else if('R'==status)
      {
          s->Stack[--s->Righttop]=x;
          printf("enter the right stack element : %d\n",s->Stack[s->Righttop]);
          return 0;
      }
      else
      {
          printf("Input error , the program ends.\n");
          exit(0);
      }
    }
    else
    {
        printf("The stack is full.\n");
        exit(0);
    }

}

int Pop_DupStack(DUPSQSTACK *s,char status,ElemType x)
{
        if(Empty_DupStack(s))
       {
           printf("The stack is empty,program is ended.\n");
           exit(0);
       }
       else
       {
           if('L'==status)
           {
               if(s->Lefttop<0)
                 exit(0);
               else
               {
               printf("out the left stack element : %d\n",s->Stack[s->Lefttop]);
               x=s->Stack[s->Lefttop--];
               }
           }
           else if('R'==status)
           {
               if(s->Righttop>=MAXSIZE)
               {
                   exit(0);
               }
               else
               {
               printf("out the right stack element : %d\n",s->Stack[s->Righttop]);
               x=s->Stack[s->Righttop++];
               }
           }
           else
           {
               printf("Input error,program ends .\n");
               exit(0);
           }
           return 0;
       }
}

int DestroyDupStack(DUPSQSTACK *s)
{
    free(s);
    s=NULL;
    return 0;
}
int main()
{
    DUPSQSTACK  *S=NULL;
    ElemType    x;
    S=InitDupStack(S);
    Push_DupStack(S,'L',1);
    Push_DupStack(S,'L',2);
    Push_DupStack(S,'R',3);
    Push_DupStack(S,'R',4);
    Pop_DupStack(S,'L',x);
    Pop_DupStack(S,'L',x);
    Pop_DupStack(S,'R',x);
    DestroyDupStack(S);
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值