前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >线性结构------共享栈

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

作者头像
刘开心_1266679
发布2019-02-14 15:26:44
6270
发布2019-02-14 15:26:44
举报
文章被收录于专栏:开心的学习之路

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

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

代码语言:javascript
复制
#include <cstdio>
#define MAX 10
#define INF 0xfffffff
typedef int DataType;

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

基本操作实现:

代码语言:javascript
复制
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];
}

测试代码:

代码语言:javascript
复制
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 ;
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2015年04月14日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档