今天总结栈的顺序存储结构
什么是栈?
栈是一种线性表,其特点是限定尽在表尾进行插入和删除操作,表尾栈一段也叫栈顶,另一端就是栈底了。既然栈是线性表,那么栈也就有两种存储数据的方式,顺序存储和链式存储。今天实现的是顺序存储的栈,也就顺序栈。
图示(来自百度图片):
顺序栈的实现:
栈的顺序存储还是比较简单的,就是对数组进行操作。
<span style="font-family:Courier New;font-size:14px;">#include <iostream>
using namespace std;
const int StackSize = 1024; //栈的最大高度
template <class T>
class SeqStack {
public:
SeqStack() {
top = -1; //空栈时
}
void PushStack(T x); //将元素x入栈
T PopStack(); //出栈
T GetTop(); //得到栈顶元素
bool IsEmpty(); //判断栈是否为空
void PrintStack();
private:
int top; //栈顶指针
T data[StackSize];
};
template <class T>
void SeqStack<T>::PushStack(T x) {
data[++top] = x; //将x入栈 将top+1
}
template<class T>
void SeqStack<T>::PrintStack() {
if(IsEmpty()) cout<<"栈为空"<<endl;
for(int i=top;i>=0;i--) {
cout<<data[i]<<" ";
}
cout<<endl;
}
template<class T>
T SeqStack<T>::PopStack() {
if(IsEmpty()) cout<<"栈为空";
return data[top--]; //返回栈顶元素后 将指针下移
}
template<class T>
T SeqStack<T>::GetTop() {
if(IsEmpty()) {
return -1;
}else {
return data[top];
}
}
//判断栈是否为空 就是判断top指针是否等于-1
template<class T>
bool SeqStack<T>::IsEmpty() {
if(top==-1)
return true;
else
false;
}
int main()
{
SeqStack<int> stack;
for(int i=0;i<5;i++) {
stack.PushStack(i);
}
cout<<"栈内元素:(按照栈顶到栈底顺序)"<<endl;
stack.PrintStack();
cout<<"出栈"<<endl;
stack.PopStack();
stack.PrintStack();
cout<<"获取栈顶元素"<<endl;
cout<<stack.GetTop()<<endl;
return 0;
}
</span>