栈的顺序存储结构的构建(C++)+ 两栈共享空间

栈顶指针为-1的时候代表栈为空

栈的类定义 :

cpp 复制代码
const int N = 1000;
class SStack{
	public:
		SStack();//构造空栈
		~SStack();//析构函数
		void push(int x);//入栈
		int pop();//出栈
		int getTop();//取栈顶元素
		bool empty();//判空
    private:
    	int data[N];//存放栈元素的数组
    	int top;//栈顶指针
};
cpp 复制代码
#include <iostream>
using namespace std;
const int N = 1000;
class SStack{
	public:
		SStack();//构造空栈
		~SStack();//析构函数
		void push(int x);//入栈
		int pop();//出栈
		int getTop();//取栈顶元素
		bool empty();//判空
    private:
    	int data[N];//存放栈元素的数组
    	int top;//栈顶指针
};
SStack :: SStack()//构造空栈
{
	top = -1;
}
void SStack :: push(int x)//入栈
{
	if(top == N - 1)  throw "上溢";
	data[++top] = x;
}
int SStack :: pop()//出栈
{
	if(top == -1)  throw "下溢";
	int x = data[top--];
	return x;
}
int SStack :: getTop()//取栈顶元素
{
	if(top == -1)  throw "下溢";
	int x = data[top];
	return x;
}
bool SStack :: empty()//判空
{
	if(top == -1)  return true;
	else  return false;
}

两栈共享空间:两栈存储的数据类型相同,两栈的空间变化相反,一个变长另一个就要变短。

当top1 = -1那么栈1为空,当top2 = N,那么栈2为空

类定义:

cpp 复制代码
const int N = 1000;
class Double_SStack{
	public:
		Double_SStack();//构造空栈
		~Double_SStack();//析构函数
		void push(int x,int SStack_num);//入栈
		int pop(int SStack_num);//出栈
		int getTop(int SStack_num);//取栈顶元素
		bool empty(int SStack_num);//判空
    private:
    	int data[N];//存放栈元素的数组
    	int top1;//栈顶指针1
    	int top2;//栈顶指针2
};
cpp 复制代码
#include <iostream>
using namespace std;
const int N = 1000;
class Double_SStack{
	public:
		Double_SStack();//构造空栈
		~Double_SStack();//析构函数
		void push(int x,int SStack_num);//入栈
		int pop(int SStack_num);//出栈
		int getTop(int SStack_num);//取栈顶元素
		bool empty(int SStack_num);//判空
    private:
    	int data[N];//存放栈元素的数组
    	int top1;//栈顶指针
    	int top2;
};
Double_SStack :: Double_SStack()//构造空栈
{
	top1 = -1;
	top2 = N;
}
void Double_SStack :: push(int x , int SStack_num)//入栈
{
	if(top1 + 1 == top2)  throw "上溢";
	if(SStack_num == 1)  data[++top1] = x;
	else if(SStack_num == 2)  data[--top2] = x;
}
int Double_SStack :: pop(int SStack_num)//出栈
{
	int x;//存数
	if(SStack_num == 1)
	{
		if(top1 == -1)  throw "下溢";
		x = data[top1--];
	}
	else if(SStack_num == 2)
	{
		if(top2 == N)  throw "下溢";
		x = data[top2++];
	}
	return x;
}
int Double_SStack :: getTop(int SStack_num)//取栈顶元素
{
	int x;
	if(SStack_num == 1)
	{
		if(top1 == -1)  throw "下溢";
		x = data[top1];
	}
	else if(SStack_num == 2)
	{
		if(top2 == N)  throw "下溢";
		x = data[top2];
	}
	return x;
}
bool Double_SStack :: empty(int SStack_num)//判空
{
	if(SStack_num == 1)
	{
		if(top1 == -1)  
		    return true;
		else
		    return false;
	}
	else if(SStack_num == 2)
	{
		if(top2 == N)
		    return true;
		else 
		    return false;
	}
}
相关推荐
Phoebe鑫19 分钟前
数据结构每日一题day11(链表)★★★★★
数据结构·算法
Jay_See42 分钟前
Leetcode——239. 滑动窗口最大值
java·数据结构·算法·leetcode
什码情况1 小时前
微服务集成测试 -华为OD机试真题(A卷、JavaScript)
javascript·数据结构·算法·华为od·机试
洋次郎的歌2 小时前
我要成为数据结构与算法高手(三)之双向循环链表
数据结构
我不会编程5551 天前
Python Cookbook-5.1 对字典排序
开发语言·数据结构·python
懒羊羊大王&1 天前
模版进阶(沉淀中)
c++
owde1 天前
顺序容器 -list双向链表
数据结构·c++·链表·list
第404块砖头1 天前
分享宝藏之List转Markdown
数据结构·list
GalaxyPokemon1 天前
Muduo网络库实现 [九] - EventLoopThread模块
linux·服务器·c++
W_chuanqi1 天前
安装 Microsoft Visual C++ Build Tools
开发语言·c++·microsoft