栈顶指针为-1的时候代表栈为空
栈的类定义 :
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;//栈顶指针
};
#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为空
类定义:
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;//栈顶指针1int top2;//栈顶指针2
};
#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;elsereturn false;}else if(SStack_num == 2){if(top2 == N)return true;else return false;}
}