前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >[2013.9.27][cpp]一个简单的链接栈模型

[2013.9.27][cpp]一个简单的链接栈模型

作者头像
ApacheCN_飞龙
发布2019-02-15 11:47:19
3600
发布2019-02-15 11:47:19
举报
文章被收录于专栏:信数据得永生信数据得永生

学数据结构的一点想法

LinkStack.h文件:

代码语言:javascript
复制
#ifndef LINKSTACH_H
#define LINKSTACH_H

#include <stdexcept>
using std::exception;

template<class Entry>
class LinkStack
{
private:
        //template<class Entry>
        struct StackToken
        {
                Entry data;
                StackToken *next;
        };

        StackToken *ptr;
        size_t count;

        void freeptr()
        {
                StackToken *nptr = ptr;
                while(nptr)
                {
                        StackToken *tmp = nptr->next;
                        delete nptr;
                        nptr = tmp;
                }
        }

        void initptr(StackToken *p)
        {
                StackToken *nptr = p.
                        **tail = &ptr;
                while(nptr)
                {
                        StackToken *tmp = new StackToken;
                        tmp->data = nptr->data;
                        *tail = tmp;
                        nptr = nptr->next;
                        tail = &(*tail)->next;
                }
                *tail = 0;
        }

public:
        LinkStack() : ptr(0), count(0) {}

        ~LinkStack() {freeptr();}

        LinkStack(const LinkStack &that) {initptr(that->ptr);}

        LinkStack& operator=(const LinkStack &that)
        {
                if(this != *that)
                {
                        freeptr();
                        initptr(that->ptr);
                }
        }

        void push(const Entry &e)
        {
                StackToken *t = new StackToken;
                t->data = e;
                t->next = ptr;
                ptr = t;
                count++;
        }

        void pop()
        {
                if(!count) throw exception("栈已空!");
                StackToken *t = ptr;
                ptr = t->next;
                delete t;
                count--;
        }
         
        bool empty() {return count == 0;}

        Entry top()
        {
                if(!count) throw exception("栈已空!");
                return ptr->data;
        }

};

#endif //LINKSTACH_H

main.cpp文件:

代码语言:javascript
复制
#include "LinkStack.h"
#include <iostream>
using namespace std;

int main()
{

        LinkStack<int> psgs;
        int n;
        cout << "请输入游客人数:" << endl;
         cin >> n;
        cout << "按顺序输入乘客编号:" << endl;
        for(int i = 0; i < n; i++)
         {
                 int item;
                 cin >> item;
                psgs.push(item);
        }
        cout << "乘客下车次序是:" << endl;
        while(!psgs.empty())
        {
                cout << psgs.top() << ' ';
                psgs.pop();
        }
        cout << endl;
        system("pause");
        return 0;
}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2014年05月16日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档