博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
数据结构:栈Stack的实现与代码分析
阅读量:5251 次
发布时间:2019-06-14

本文共 2020 字,大约阅读时间需要 6 分钟。

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

只能访问栈顶。

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

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

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

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

先看看代码:

////  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
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
_list;//链表实现 }; //用vector实现的栈,因为觉得以后用得比较多,所以直接叫做Stack了 template
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
_theArray;//vector实现 };}#endif /* defined(__HelloWorld__Stack__) */
再补充一下,两个Stack模板类,都没有实现自己的构造函数,复制构造函数,复制赋值运算符,析构函数等。因为所使用的list和vector都是已经实现了可复制的。

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

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

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

转载于:https://www.cnblogs.com/fablegame/p/6430212.html

你可能感兴趣的文章
Android滑动到顶部悬停
查看>>
Swift - 使用NSNotificationCenter发送通知,接收通知
查看>>
Swift - 自定义单元格实现微信聊天界面
查看>>
React项目需要安装的第三方插件或包随手一记-----------------------------------------【凤、独影】...
查看>>
HDU 4799 LIKE vs CANDLE 树形dp
查看>>
Python学习--打码平台
查看>>
安卓应用的界面编程(2)
查看>>
【[HNOI2008]GT考试】
查看>>
[NOI2016]循环之美
查看>>
VS2017 -error LNK1104: 无法打开文件“msvcprtd.lib”
查看>>
Spring3系列4-多个配置文件的整合
查看>>
开始→运行(cmd)命令大全
查看>>
大小写转换
查看>>
第一篇
查看>>
linux基础知识学习笔记
查看>>
[转] 窗口封装类与Windows窗口实例的关系-3、CWnd如何处理窗口消息
查看>>
2018总结之一个有仪式感的2019启航
查看>>
3.31
查看>>
Linux静态路由配置
查看>>
进程通信方式-线程通信方式
查看>>