数据结构:栈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
- 数据结构:栈Stack的实现与代码分析
- 数据结构与算法分析 P86 Stack 栈的实现
- 数据结构:向量Vector的实现与代码分析
- 数据结构:链表List的实现与代码分析
- 数据结构:队列Queue的实现与代码分析
- 数据结构栈stack的动态数组实现
- 数据结构与算法分析-栈的实现
- Java数据结构----栈(Stack)源码分析和个人简单实现
- Java数据结构----栈(Stack)源码分析和用链表简单实现
- Stack数据结构的模板实现
- java实现的stack数据结构
- java实现数据结构——栈Stack与队列Queue
- 数据结构与算法---栈(stack)
- C++ stack的代码实现
- C++数据结构栈Stack的实现模板类
- 数据结构与算法3: 栈的算法应用(Stack applications)
- 数据结构中栈与队列的c语言代码实现
- [数据结构与算法分析] 栈的链表实现
- STL源码剖析学习笔记(一)
- 匆匆的一年又匆匆地过去了
- this和super关键字
- Hibernate4-集合映射
- Java小程序之哈夫曼树与文件压缩和解压缩(三)文件解压篇
- 数据结构:栈Stack的实现与代码分析
- MSChart如何实现线图
- 小于号重载须注意的问题——strict weak ordering
- maven pom文件解析
- 直播学习一链接
- uva 1543 Telescope
- java.security.InvalidKeyException: Illegal key size
- nyoj214_单调递增子序列(2)二分查找 nlogn
- 选择排序(Selection Sort)