数据结构之共享栈(堆存储)

#include<iostream>
using namespace std;
 
const int MAXSIZE = 20;
typedef int SElemType;
typedef struct HeDoubleStack
{
	SElemType *pBase;
	int top1;
	int top2;
}HeDoubleStack;

void Visit(SElemType c)
{
	cout << c;
}

void InitStack(HeDoubleStack &S)
{
	S.pBase = new SElemType[MAXSIZE];
	S.top1 = -1;
	S.top2 = MAXSIZE;
}

void ClearStack(HeDoubleStack &S)
{
	S.top1 = -1;
	S.top2 = MAXSIZE;
}

void DestroyStack(HeDoubleStack &S)
{
	delete[]S.pBase;
	S.pBase = NULL;
	S.top1 = -1;
	S.top2 = MAXSIZE;
}

bool StackEmpty(HeDoubleStack S)
{
	if (S.top1 == -1 && S.top2 == MAXSIZE)
		return true;
	else
		return false;
}

bool StackFull(HeDoubleStack S)
{
	if (S.top1+1==S.top2)
		return true;
	else
		return false;
}

int StackLength(HeDoubleStack S)
{
	return (S.top1 + 1) + (MAXSIZE - 1 - S.top2);
}

bool Push(HeDoubleStack &S, SElemType e, int stackNumber)
{
	if (StackFull(S)) 
		return false;
	if (stackNumber == 1)
	{
		S.pBase[++S.top1] = e; /* 若是栈 1 则先 top1+1 后给数组元素赋值。 */
		return true;
	}
	else if (stackNumber == 2)  /* 栈 2 有元素进栈 */
	{
		S.pBase[--S.top2] = e; /* 若是栈 2 则先 top2-1 后给数组元素赋值。 */
		return true;
	}
	else
		return false;
}

bool Pop(HeDoubleStack &S, SElemType &e, int stackNumber)
{
	if (StackEmpty(S))
		return false;
	if (stackNumber == 1)
	{
		e = S.pBase[S.top1--];
		return true;
	}
	else if (stackNumber == 2)
	{
		e = S.pBase[S.top2++];
		return true;
	}
	else
		return false;
}
void StackTraverse(HeDoubleStack S)
{
	int i = 0;
	while (i < S.top1)
	{
		Visit(S.pBase[i++]);
	}
	i = S.top2;
	while (i < MAXSIZE)
	{
		Visit(S.pBase[i++]);
	}
	cout << endl;
}

void main()
{
	int j;
	SElemType e;
	HeDoubleStack S;
	InitStack(S);
	for (j = 1; j <= 5; j++)
		Push(S, j, 1);
	for (j = MAXSIZE; j >= MAXSIZE - 2; j--)
		Push(S, j, 2);
	printf("栈中元素依次为:");
	StackTraverse(S);
	printf("当前栈中元素有:%d \n", StackLength(S));
	Pop(S, e, 2);
	printf("弹出的栈顶元素 e=%d\n", e);
	printf("栈空否:%d(1:空 0:否)\n", StackEmpty(S));
	for (j = 6; j <= MAXSIZE - 2; j++)
		Push(S, j, 1);
	printf("栈中元素依次为:");
	StackTraverse(S);
	printf("栈满否:%d(1:否 0:满)\n", Push(S, 100, 1));
	ClearStack(S);
	printf("清空栈后,栈空否:%d(1:空 0:否)\n", StackEmpty(S));
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值