双端堆栈的实现

本文探讨了如何使用顺序存储结构实现双端堆栈,以最大限度地利用存储空间并减少溢出的可能性。通过将两个栈的栈底设置在数组的两端,当栈顶相遇时才可能出现溢出。此外,利用一个tag变量区分不同栈的操作,实现初始化、判空和出栈等基本操作。
摘要由CSDN通过智能技术生成

原题:设有两个栈S1和S2,都采用顺序表示,并且共享一个存储区V[0:MAXSIZE],为尽量利用空间,减少溢出的可能,现采用栈顶相对,迎面增长的方式存储。试设计公用栈基本操作,实现初始化,判空和出栈操作的算法。

分析:将两个栈底置在数组V[0:maxsize]的两端,迎面增长,只有当两个栈相遇时才会溢出,另外一个变量tag(=1,2)来表示S1和S2的操作。

#include<iostream.h>
#define MAXSIZE 100 //存储空间最大容量
#define ElemType char

typedef struct
{
	ElemType v[MAXSIZE]; //栈空间
	int top1; //S1栈底
	int top2; //S2栈底
}DuSqStack;

int InitStack(DuSqStack &S)
{
	S.top1=0; //S.top1==0表示S1空
	S.top2=MAXSIZE - 1; //S.top2 == MAXSIZE - 1 表示S2空
	return 1;
}

int StackEmpty(DuSqStack S,int tag)//判栈空
{//判空,tag==1时判S1是否为空,tag==2时判S2是否为空
	if(tag==1)
	{
		if(S.top1=
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Storm-Shadow

你的鼓励将是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值