链表栈

#include<iostream>
#include<cstdlib>
using namespace std;

template <class T>
struct node
{
    T data;
    node *next;
};

template <class T>
class listack
{
    node<T> *head;
public:
    listack()
    {
        head=NULL;
        cout<<"栈初始化"<<endl;
    }
    bool push(T a)
    {
        node<T> *p;
        if(head==NULL)
        {
            p=new node<T>;
            if(p==NULL)return false;
            p->data=a;
            p->next=NULL;
            head=p;
            return true;
        }
        p=new node<T>;
        if(p==NULL)return false;
        p->data=a;
        p->next=head;
        head=p;
        return true;
    }
    bool pop(T &a)
    {
        node<T> *p;
        if(head==NULL)return false;
        a=head->data;
        p=head;
        head=head->next;
        free(p);
        return true;
    }
    bool is_empty()
    {
        if(head==NULL)
            return true;
        else 
            return false;
    }
    ~listack()
    {
        cout<<"栈释放"<<endl;
        if(head==NULL)return;
        node<T> *p;
        p=head;
        head=head->next;
        while(head!=NULL)
        {
            free(p);
            p=head;
            head=head->next;
        }
        free(p);
    }
};

int main()
{
    listack <char> a;
    if(a.is_empty())cout<<"栈为空"<<endl;
    else cout<<"栈不为空"<<endl;
    a.push('a');
    a.push('b');
    a.push('c');
    a.push('d');
    a.push('e');
    cout<<"a b c d e 入栈"<<endl;
    char te;
    if(a.is_empty())cout<<"栈为空"<<endl;
    else cout<<"栈不为空"<<endl;
    while(a.pop(te))
    {
        cout<<te<<" ";
    }
    cout<<endl;
    if(a.is_empty())cout<<"栈为空"<<endl;
    else cout<<"栈不为空"<<endl;
    a.~listack();
    system("pause");
    return 0;
}

        

类模版实现链表栈,作业,记录一下,以备以后参考。
原文地址:https://www.cnblogs.com/pojdd/p/7742193.html