http://blog.csdn.net/itcastcpp/article/details/39271661
今天,我们一起用C++写链栈,具体如下。
LinkStack.h具体内容:
[cpp] view plain copy
- #include "StackNode.h"
- template<typename Type> class LinkStack{
- public:
- LinkStack() :m_ptop(NULL){}
- ~LinkStack(){
- MakeEmpty();
- }
- public:
- void MakeEmpty(); //make the stack empty
- void Push(const Type item); //push the data
- Type Pop(); //pop the data
- Type GetTop() const; //get the data
- void Print(); //print the stack
- bool IsEmpty() const{
- return m_ptop == NULL;
- }
- private:
- StackNode<Type> *m_ptop;
- };
- template<typename Type> void LinkStack<Type>::MakeEmpty(){
- StackNode<Type> *pmove;
- while (m_ptop != NULL){
- pmove = m_ptop;
- m_ptop = m_ptop->m_pnext;
- delete pmove;
- }
- }
- template<typename Type> void LinkStack<Type>::Push(const Type item){
- m_ptop = new StackNode<Type>(item, m_ptop);
- }
- template<typename Type> Type LinkStack<Type>::GetTop() const
- {
- if (IsEmpty()){
- cout << "There is no elements!" << endl;
- exit(1);
- }
- return m_ptop->m_data;
- }
- template<typename Type> Type LinkStack<Type>::Pop()
- {
- if (IsEmpty()){
- cout << "There is no elements!" << endl;
- exit(1);
- }
- StackNode<Type> *pdel = m_ptop;
- m_ptop = m_ptop->m_pnext;
- Type temp = pdel->m_data;
- delete pdel;
- return temp;
- }
- template<typename Type> void LinkStack<Type>::Print(){
- StackNode<Type> *pmove = m_ptop;
- cout << "buttom";
- while (pmove != NULL){
- cout << "--->" << pmove->m_data;
- pmove = pmove->m_pnext;
- }
- cout << "--->top" << endl << endl << endl;
- }
[cpp] view plain copy
- template<typename Type> class LinkStack;
- template<typename Type> class StackNode{
- private:
- friend class LinkStack < Type > ;
- StackNode(Type dt, StackNode<Type> *next = NULL) :m_data(dt), m_pnext(next){}
- private:
- Type m_data;
- StackNode<Type> *m_pnext;
- };
[cpp] view plain copy
- #include <iostream>
- using namespace std;
- #include "LinkStack.h"
- int main(){
- LinkStack<int> stack;
- int init[10] = { 1, 3, 5, 7, 4, 2, 8, 0, 6, 9 };
- for (int i = 0; i < 10; i++){
- stack.Push(init[i]);
- }
- stack.Print();
- cout << stack.Pop() << endl;
- stack.Print();
- cout << stack.GetTop() << endl;
- stack.Print();
- cout << stack.Pop() << endl;
- stack.Print();
- stack.MakeEmpty();
- stack.Print();
- cin.get();
- return 0;
- }
运行效果如图1所示:
图1 运行效果