栈的顺序存储结构的构建(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;
	}
}
相关推荐
郭涤生6 小时前
布隆过滤器
c++
智者知已应修善业7 小时前
【求中位数】2024-1-23
c语言·c++·经验分享·笔记·算法
9ilk7 小时前
【C++】--- 特殊类设计
开发语言·c++·后端
程序员zgh11 小时前
Linux系统常用命令集合
linux·运维·服务器·c语言·开发语言·c++
獭.獭.11 小时前
C++ -- STL【unordered_set与unordered_map的实现】
开发语言·c++·unordered_map·unordered_set
qq_4335545411 小时前
C++数位DP
c++·算法·图论
似水এ᭄往昔12 小时前
【C++】--AVL树的认识和实现
开发语言·数据结构·c++·算法·stl
程序员zgh12 小时前
常用通信协议介绍(CAN、RS232、RS485、IIC、SPI、TCP/IP)
c语言·网络·c++
暗然而日章12 小时前
C++基础:Stanford CS106L学习笔记 8 继承
c++·笔记·学习
有点。12 小时前
C++ ⼀级 2023 年06 ⽉
开发语言·c++