今天总结栈的顺序存储结构
什么是栈?
栈是一种线性表,其特点是限定尽在表尾进行插入和删除操作,表尾栈一段也叫栈顶,另一端就是栈底了。既然栈是线性表,那么栈也就有两种存储数据的方式,顺序存储和链式存储。今天实现的是顺序存储的栈,也就顺序栈。
图示(来自百度图片):
顺序栈的实现:
栈的顺序存储还是比较简单的,就是对数组进行操作。
<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>
原文地址:http://blog.csdn.net/hsk256/article/details/45646221