以下是这一次的作业。
Push(0,x)表示插入左栈,Push(1,x)表示插入右栈。依次类推。
#include <stdio.h>
#include <stdlib.h>
typedef struct STACK{
int *top[2];
int *base[2];
int *p;
}STACK;
void InitStack(STACK *s, int m)
{
(*s).p = (int *)malloc(sizeof(int)*m);
if(!(*s).p) exit(-1);
(*s).base[0] = (*s).top[0] = (*s).p;
(*s).base[1] = (*s).top[1] = (*s).p + (m-1);
}
bool EmptyStack(STACK *s)
{
if((*s).top[0] == (*s).base[0] && (*s).top[1] == (*s).base[1]) return true;
return false;
}
bool OverStack(STACK *s)
{
if((*s).top[0] - (*s).top[1] == 1) return true;
return false;
}
void Push(STACK *s, int d, int x)
{
if(OverStack(s)) {
printf("The stack is full!\n");
return ;
}
if(d == 0) {
*((*s).top[d]) = x;
(*s).top[d]++;
}
else {
*((*s).top[d]) = x;
(*s).top[d]--;
}
}
void Pop(STACK *s, int d)
{
if(EmptyStack(s)) {
printf("The stack is empty!\n");
return ;
}
int x;
if(d == 0) {
(*s).top[0]--;
x = *((*s).top[0]);
}
else {
(*s).top[1]++;
x = *((*s).top[1]);
}
printf("%d\n", x);
}
int main()
{
STACK s;
int m;
scanf("%d", &m);
InitStack(&s, m);
return 0;
}
原文:http://blog.csdn.net/j_sure/article/details/44630191