关键思路:
1.两栈的栈顶指针top1,和top2,分别由数组两端向中间靠拢,如果top1 + 1 == top2(两个指针相遇)即为栈满的判定条件。
2.栈1为空时 top1 = -1; 栈2为空时 top2 = MAXSIZE(即数组的最大长度)。
3.设置判定条件,如果两个栈顶指针不相遇,则该栈就可以一直使用。
实现代码如下:
#include <stdio.h>
#define MAXSIZE 1024
#define OK 1
#define ERROR 0
// 两栈共享空间
typedef struct
{
int data[MAXSIZE];
int top1; // 栈1栈顶指针
int top2; // 栈2栈顶指针
}SqDoubleStack;
int Push(SqDoubleStack *s, int e, int StackNumber) // 入栈 StackNumber用来判断是栈1还是栈2
{
if(s->top1 + 1 == s->top2)
{
printf("栈满!\n");
return ERROR;
}
if(StackNumber == 1) // 栈1入栈
{
s->data[++s->top1] = e;
}