要求:

利用链表实现栈的基本操作。

代码:

/************************************************************************/
/* 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;
}