//Designed by st
#include <stdio.h>
#include <stdlib.h>
#define MAXNUM 8
#define OVERFLOW -1
#define UNDERFLOW -2
#define FLAGERROR -3
typedef 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;
}
两个数组实现堆栈
最新推荐文章于 2024-08-19 18:11:33 发布