将编号为0和1的两个栈存放于一个数组空间V[m]中,栈底分别处于数组的两端。当第0号栈的栈顶指针top[0]等于-1时该栈为空;当第1号栈的栈顶指针top[1]等于m时,该栈为空。两个栈均从两端向中间增长(见下图)。试编写双栈初始化,判断栈空、栈满、进栈和出栈等算法的函数。双栈数据结构的定义如下:
typedef struct{
int top [ 2],bot [ 2];//栈顶和栈底指针
SElemType *v ;//栈数组
int m ;//栈最大可容纳元素个数
}Dblstack;
图示
代码
#include <stdio.h>
#include <stdlib.h>
#define TRUE 1
#define FALSE 0
#define ERROR 0
#define OK 1
#define INIT_SIZE 5
#define INCREASE_SIZE 2
#define OVERFLOW -1
#define EMPTY_ELEM -1
typedef int ElemType;
typedef int status;
typedef struct {
int top[2], bot[2];//栈顶和栈底指针
ElemType *v;//栈数组
int m;//栈最大可容纳元素个数
} DblStack;
//数组初始化要使用malloc, 否则只是进行了声明, 未开辟空间无法存储内容
void initDblStack(DblStack &stack) {
ElemType *arr = (ElemType *) malloc(sizeof(ElemType) * INIT_SIZE);
stack.v = arr;
stack.m = INIT_SIZE;
stack.top[0] = 0;
stack.bot[0] = 0;
stack.top[1] = stack.m - 1;
stack.bot[1]