数据结构示例之数组模拟多栈实现

以下为“使用数组实现多个连续栈”的示例:

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);
}

运行结果如下图所示:


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值