数据结构:栈Stack的实现与代码分析

来源:互联网 发布:听小说的软件 编辑:程序博客网 时间:2024/05/21 06:57

栈的主要特点是LIFO,后进先出。

只能访问栈顶。

可以使用数组或者链表来实现。

所以写了两个版本的实现。

其实,从代码的角度看,直接使用List是最简单的,但是从效率的角度看,使用vector更加高效一点。

对于List和Vector,都是使用自己实现的简单模板。Vector模板的实现 List模板的实现

先看看代码:

////  Stack.h//  HelloWorld//  csdn blog:http://blog.csdn.net/u012175089//  Created by feiyin001 on 17/1/8.//  Copyright (c) 2017年 FableGame. All rights reserved.//#ifndef __HelloWorld__Stack__#define __HelloWorld__Stack__#include "List.h"#include "Vector.h"namespace Fable{    //用链表实现的栈,其实比较少用的,所以叫做ListStack    template<typename Object>    class ListStack    {    public:        //只能向栈顶插入数据        void push(const Object& obj)        {            _list.push_back(obj);//把数据放到链表末尾        }        //弹出栈顶数据        void pop()        {            _list.pop_back();//弹出list的末尾的数据        }        //获得栈顶的数据        Object& top()        {            return _list.back();//获得list最后的数据        }        //判断为空        bool empty()        {            return _list.empty();//直接返回list是否为空        }        //获得栈的大小        int size()        {            return _list.size();//返回list的大小        }            private:        List<Object> _list;//链表实现    };        //用vector实现的栈,因为觉得以后用得比较多,所以直接叫做Stack了    template<typename Object>    class Stack    {    public:        //压入数据        void push(const Object& obj)        {            _theArray.push_back(obj);//把数据放到vector末尾        }        //弹出数据        void pop()        {            _theArray.pop_back();//弹出vector最后的数据        }        //返回栈顶的数据        Object& top()        {            return _theArray.back();//返回vector最后一个数据        }        //判断栈是否为空        bool empty()        {            return _theArray.empty();//返回vector是否为空        }        //返回栈的大小        int size()        {            return _theArray.size();//返回vector的大小        }            private:        Vector<Object> _theArray;//vector实现    };}#endif /* defined(__HelloWorld__Stack__) */
再补充一下,两个Stack模板类,都没有实现自己的构造函数,复制构造函数,复制赋值运算符,析构函数等。因为所使用的list和vector都是已经实现了可复制的。

而且自身也没有新的属性,所以就不需要自己去实现了。

再补充一下看到的知识点:

尾递归,指在最后一行的递归调用。


1 0
原创粉丝点击