栈的顺序存储结构的构建(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;
	}
}
相关推荐
_wxd66629 分钟前
STL-stack与queue与priority_queue(容器适配器)
c++
zh路西法1 小时前
【玩转VLA具身智能机械臂】(二):MoveIt2 运动规划——架构、配置与 C++ 上手
c++·机械臂·路径规划·vla·planner·moveit2
爱和冰阔落2 小时前
【Linux】Ctrl+C 到底做了什么?从键盘、kill 到 alarm,一次讲清信号的产生
linux·运维·c++·安卓
水饺编程2 小时前
第5章,[Win32 章节] :贝塞尔样条曲线(一)
c语言·c++·windows·visual studio
疯狂打码的少年2 小时前
【数据结构】交换类排序:冒泡与快速排序
数据结构·笔记·算法·排序算法
Nil2083 小时前
leetcode 108有序数组转换为二叉搜索树
数据结构·算法·leetcode
程序员打怪兽3 小时前
C++:类与对象,封装,继承,多态,构造/析构,重载/重写
c++
hn小菜鸡3 小时前
LeetCode 763、划分字母区间
数据结构·算法·leetcode
Escalating_xu3 小时前
【C++ STL简介】从六大组件到容器、迭代器与算法协作
java·c++·算法
Brilliantwxx3 小时前
【Linux】 进程(3)深度解析:从查看进程到进程状态
linux·服务器·网络·c++