要求:
利用链表实现栈的基本操作。
代码:
/************************************************************************/ /* header.h */ /************************************************************************/ #ifndef _STACK #define _STACK #include <iostream> using namespace std; //链表节点类 template <class T> class Node { public: T data; Node <T> *next; }; //栈的类声明 template <class T> class myStack { public: myStack(); ~myStack(); T pop(); T topNode(); void push(const T&); bool isEmpty();//判断栈是不是空 private: Node<T> *top; //栈顶指针 }; //构造函数 template <class T> myStack<T>::myStack() { top = NULL; } //析构函数 template <class T> myStack<T>::~myStack() { //释放申请的内存,逐个释放内存 while(top) { Node <T> *p; p = top; top = top->next; delete p; } } //判断栈是不是空 template <class T> bool myStack<T>::isEmpty() { if(top) return false; return true; } //出栈 template <class T> T myStack<T>::pop() { if(!isEmpty()) { T tmp = top->data; Node<T> *p = top; top = top->next; delete p; return tmp; } else { cout << "myStack is empty!\n"; } } //入栈 template <class T> void myStack<T>::push(const T & a) { //申请内存,存储新入栈节点 Node<T> *p = new Node <T>; p->next = top; p->data = a; top = p; } //获取栈顶元素 template <class T> T myStack<T>::topNode() { if(!isEmpty()) { T tmp = top->data; return tmp; } else { cout << "myStack is empty!\n"; exit(0); } } #endif /************************************************************************/ /*test.cpp */ /************************************************************************/ #include "header.h" #include <iostream> using namespace std; int main() { myStack<int> myS; myS.push(12); cout << myS.top()<<endl; myS.pop(); return 0; }