两个数组实现堆栈

来源:互联网 发布:linux打包解包 编辑:程序博客网 时间:2024/05/16 12:19
//Designed by st#include <stdio.h>#include <stdlib.h>#define MAXNUM 8#define OVERFLOW -1#define UNDERFLOW -2#define FLAGERROR -3typedef int elemtype;typedef struct stack{    int top;    int flag;}stack;typedef struct ShareArrStack{    elemtype data[MAXNUM];    stack stack1;    stack stack2;}ShareArrStack;void Init(ShareArrStack *s){    (s->stack1).top = -1;    (s->stack1).flag = 1;    (s->stack2).top = MAXNUM;    (s->stack2).flag = 2;}int IsFull(ShareArrStack *s){    return ((s->stack1).top +1 == (s->stack2).top);}int IsEmpty(ShareArrStack *sn){    return (((sn->stack1).top == -1) || ((sn->stack2).top == MAXNUM));}void push(ShareArrStack *s, stack sn, elemtype x){    if (IsFull(s))    {        printf("the stack  overflow!");        exit(OVERFLOW);    }    else    {        switch (sn.flag)        {        case 1:        {                  s->stack1.top += 1;                  s->data[s->stack1.top] = x;                  break;        }        case 2:        {                  s->stack2.top -= 1;                  s->data[s->stack2.top] = x;                  break;        }        default:        {                   exit(FLAGERROR);        }        }    }}elemtype pop(ShareArrStack *s, stack sn){    if (IsEmpty(&sn))    {        printf("the stack underflow!");        exit(UNDERFLOW);    }    else    {        switch (sn.flag)        {        case 1:        {                  return s->data[s->stack1.top--];                  break;        }        case 2:        {                  return s->data[s->stack2.top++];                  break;        }        default:        {                   exit(FLAGERROR);        }        }    }}int main(){    ShareArrStack *s =NULL;    s = (ShareArrStack*)malloc(sizeof(ShareArrStack));    Init(s);    push(s, s->stack1, 1);    printf("%d,", s->data[s->stack1.top]);    push(s, s->stack2, 9);    push(s, s->stack1, 9);    push(s, s->stack2, 4);    printf("%d,", pop(s, s->stack2));    printf("%d,", pop(s, s->stack1));    system("pause");    return 0;}
0 0