以下为“使用数组实现多个连续栈”的示例:
1. 用c语言实现的版本
#include<stdio.h>
#include<stdlib.h>
#define MEMORY_SIZE 100 /* 内存大小 */
#define MAX_STACKS 11 /* 栈的个数最大值加1 */
typedef char element;
element memory[MEMORY_SIZE];
int top[MAX_STACKS - 1];
int boundary[MAX_STACKS];
/*初始化,将各个顺序栈置空*/
void Initial(int n)
{
int i;
for (i = 0; i < n; ++i)
{
top[i] = boundary[i] = (MEMORY_SIZE / n)*i - 1;
}
boundary[n] = MEMORY_SIZE - 1;
}
/* 进栈:向索引为i的栈压入元素item */
void Push(int i, element item)
{
if (top[i] == boundary[i + 1])
{
printf("第%d个栈已满。", i);
exit(1);
}
memory[++top[i]] = item;
}
/* 退栈:索引为i的栈弹出元素 */
element Pop(int i)
{
if (top[i] == boundary[i])
{
printf("第%d个栈已空。", i);
exit(1);
}
return memory[top[i]--];
}
void main()
{
int n; /* 使用的栈的个数 */
element first, sec;
element a, b;
printf("请输入栈的个数(n>=1 并且 n<=10):");
scanf("%d", &n);
Initial(n); /*初始化,将各个顺序栈置空*/
printf("初始化%d个栈\n", n);
a = 'a';
printf("向索引为1的栈压入元素: %c\n", a);
Push(1, a);
b = 'b';
printf("向索引为0的栈压入元素: %c\n", b);
Push(0, b);
sec = Pop(1);
printf("从索引为1的栈弹出元素: %c\n", sec);
first = Pop(0);
printf("从索引为0的栈弹出元素: %c\n", first);
}
运行结果如下图所示: