共享栈的实现(C++版)

前言

栈的应用非常广泛,经常出现 一个程序需要同时使用多个栈的情况。使用顺序栈会由于栈大小难以准确估计,从而造成有的栈溢出,有的栈空闲。为了解决这个问题,可以让多个栈共享一个足够大的连续存储空间,通过利用栈的动态特性使多个栈的存储空间能够互相补充,存储空间得到有效利用,这就是共享栈。

在栈的共享问题中,最常用的是两个栈的共享。共享栈主要利用栈顶固定,栈顶迎面增长的方式。实现方法是两个栈共享一个一维数组空间,两个栈的栈顶设在数组的两端,当有意思进栈时,栈顶位置从栈的两端迎面增长,当两个栈的栈顶相遇时,栈满。


两个共享栈的数据结构类型定义如下

typedef struct
{
	DataType stack[StackSize];
	int top[2];
}SSeqStack;

其中,top[1]和top[2]分别是两个栈的栈顶指针。


共享栈的算法操作

(1)初始化操作。

void InitStack(SSeqStack *S)
{
	S->top[0]=0;
	S->top[1]=StackSize-1;
}

(2)进栈操作。

首先判断栈是否已满,另外还要通过一个标志变量flag判断是哪个栈要进行进栈操作。

int PushStack(SeqStack *S,DataType e,int flag)
{
	if (S->top[0]==S->top[1])
	{
		printf("栈已满");
		return 0;
	}
	switch(flag)
	{
	case 0:
		S->stack[S->top[0]]=e;
		S->top[0]++;
		break;
	case 1:
		S->stack[S->top[1]]=e;
		S->top[1]--;
		break;
	default:
		return 0;

	}
	return 1;
}
(3)出栈操作。

int PopStack(SeqStack *S,DataType *e,int flag)
{
	switch(flag)
	{
	case 0:
		if (S->top[0]==0)
		{
			return 0;
		}
		S->top[0]--;
		*e=S->stack[S->top[0]];
		break;
	case 1:
		if (S->top[1]==StackSize-1)
		{
			return 0;
		}
		S->top[1]++;
		*e=S->stack[S->top[1]];
		break;
	default:
		return 0;
	}
	return 1;
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值