栈顶指针为-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;
}
}