线性结构------共享栈

如果一个程序需要使用多个栈,使用顺序栈就会造成栈空间大小难以估计,从而造成有的栈溢出有的栈空闲,此时可以建立一个共享栈,通俗地讲就是将两个栈的栈底设置在同一个数组的两端,栈顶位置用top1、top2表示。如图:

所以共享栈的数据结构类型为:

#include <cstdio>
#define MAX 10
#define INF 0xfffffff
typedef int DataType;

struct DStack
{
	DataType data[MAX];
	int top1;               //top1从数组头部向尾部移动 
	int top2;               //top2从数组尾部向头部移动 
};

基本操作实现:

void InitDStack(DStack &s)
{
	s.top1 = 0;
	s.top2 = MAX - 1;
}

bool isFull(DStack &s)
{
	/*与top的走动方式有关,我这里top1从0开始,
	用top1++,所以判断栈满标志为top2跑到top1前面 */ 
	return s.top1 > s.top2 ? true : false;
}

void Push(DStack &s, DataType e, int tag)
{
	if(isFull(s))
	{
		printf("Full!\n");
		return ;		
	}
	if(tag)
		s.data[s.top1++] = e;
	else
		s.data[s.top2--] = e;
}

bool isEmpty(DStack &s, int tag)
{
	if(tag)
		return s.top1 == 0 ? true : false;
	else
		return s.top2 == MAX - 1 ? true : false;
}

DataType Pop(DStack &s, int tag)
{
	if(isEmpty(s, tag))
	{
		printf("Empty!\n");
		return INF;
	}
	if(tag)
		return s.data[--s.top1];
	else
		return s.data[++s.top2];
}

测试代码:

int main()
{
	DStack s;
	int t1, t2;
	InitDStack(s);
	
	//测试Push
	 
	for(int i = 0; i < 5; i++)
	{
		Push(s, i, 1); 
		Push(s, 10 - i, 0);
	}
	for(int i = 0; i < 10; i++)
	{
		printf("%d ", s.data[i]);
	}	
	printf("\n");
	
	Push(s, 100, 1);
	Push(s, 100, 0);
	
	printf("\n\n");
	
	//测试Pop
	for(int i = 0; i < 5; i++)
	{
		t1 = Pop(s, 1); 
		t2 = Pop(s, 0);
		printf("t1 = %d\nt2 = %d\n", t1, t2);
	}
	
	t1 = Pop(s, 1);
	t2 = Pop(s, 0);
	return 0 ;
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值