数据结构c++顺序表实现栈(共享栈)

数据结构c++顺序表实现栈(共享栈)


前言

提示:这里可以添加本文要记录的大概内容:
例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。


提示:以下是本篇文章正文内容,下面案例可供参考

一、什么为共享栈?

基于顺序表实现,数组有连个端点,两个端点为两个栈的栈低,两个栈共用一个数组。

二、实现代码

#pragma once

const int SIZE = 20;

enum StatckNumber
{
	eStatckFirst,
	eStatckSecond
};

class SharedStacks
{
public:
	SharedStacks()
	{
		memset(data, 0, SIZE);
		top1 = -1;
		top2 = SIZE;
	}

	void push(int d, StatckNumber statck)
	{
		if (top1 - 1 == top2)		// 栈已满
			return;
		if (statck == eStatckFirst)		//第一个栈入栈
		{
			data[++top1] = d;
		}
		else	//第二个栈入栈
		{
			data[--top2] = d;
		}
	}

	int pop(StatckNumber statck)
	{
		int data;
		if (statck == eStatckFirst)		//第一个栈入栈
		{
			if (top1 != -1)
			{
				data = this->data[top1--];
			}
		}
		else	//第二个栈入栈
		{
			if (top2 != SIZE)
			{
				data = this->data[top2++];
			}
		}
		return data;
	}
private:
	int data[SIZE];		
	int top1;	//第一个栈顶
	int top2;	//第二个栈顶
};


总结

该方法只适用于两个栈的类型一样的情况,并且由于采用的是顺序表存储,栈满时扩展很麻烦,可以判断栈满时,重新申请一片更大的存储空间,将旧的数据拷贝到新的内存空间,然后释放旧的内存空间。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值