今天总结链栈。
什么是链栈?
链栈就是栈的链式存储结构,就跟单链表差不多。只不过头指针变成了栈顶指针,这个指针总是指向栈顶元素。栈底结点的指针域指向NULL,当top==NULL时,则栈为空.具体实现时,对比着单链表,然后结合图示,很容易就写出来了。
图示:
实现:
<span style="font-family:Courier New;font-size:14px;">#include <iostream> using namespace std; template <class T> struct Node { T data; struct Node<T> *next; }; template <class T> class LinkStack{ public: LinkStack() { top = NULL; //空栈 } ~LinkStack(); //析构函数 释放结点空间 void Push(T x); //入栈 T Pop(); //出栈 T GetTop(); //得到栈顶元素 void PrintStack(); //打印栈内元素 bool IsEmpty(); //判断是否为空栈 private: struct Node<T> *top; }; template <class T> void LinkStack<T>::Push(T x) { Node<T> *p = new Node<T>; p->data = x; p->next = top; top = p ; } template <class T> void LinkStack<T>::PrintStack() { Node<T> * p = top; //保存栈顶指针 while(top) { cout<<top->data<<" "; top = top->next; } top = p; //使栈顶指针重新指向栈顶元素 cout<<endl; } template <class T> T LinkStack<T>::Pop() { if(IsEmpty()) cout<<"栈为空"; Node<T> *p = top; T x = top->data; top = top->next; delete p; return x; } template <class T> bool LinkStack<T>::IsEmpty() { if(top==NULL) return true; else return false; } template <class T> T LinkStack<T>::GetTop() { if(IsEmpty()) cout<<"栈为空"<<endl; return top->data; } template <class T> LinkStack<T>::~LinkStack() { while(top) { Node<T> *p = top; top = top->next; delete p; } } int main() { LinkStack<int> stack; for(int i=0;i<5;i++) { stack.Push(i); } stack.PrintStack(); cout<<"出栈:"<<endl; cout<<stack.Pop()<<endl; stack.PrintStack(); cout<<"获取栈顶元素"<<endl; cout<<stack.GetTop()<<endl; return 0; } </span>
原文地址:http://blog.csdn.net/hsk256/article/details/45675533