【栈队列】一个数组实现两个栈(共享栈)
来源:互联网 发布:淘宝不能发布宝贝2手 编辑:程序博客网 时间:2024/05/17 05:51
一个数组实现两个栈,就是共享栈的实现问题。
从图中可以看出,数组的起始位置和终点位置分别为两个栈的栈底。
给一个数组,给出两个栈顶,再给一个数组的容量。
废话不说,代码实现
template<class T>class SharedStack{public: SharedStack() : _a(NULL) , _top1(0) , _top2(0) , _capacity(0) { _CheckCapacity(); } ~SharedStack() { if (_a) delete[] _a; } void Push1(const T& data) { _CheckCapacity(); _a[_top1++] = data; } void Push2(const T& data) { _CheckCapacity(); _a[_top2--] = data; } void Pop1() { if (_top1 > 0) --_top1; } void Pop2() { if (_top2 < _capacity - 1) _top2++; } size_t Size1() { return _top1; } size_t Size2() { return _capacity - 1 - _top2; } bool Empty1() { return _top1 == 0; } bool Empty2() { return _top2 == _capacity - 1; } T& Top1() { if (_top1>0) { return _a[_top1 - 1]; } } T& Top2() { if (_top2 < _capacity - 1) return _a[_top2 + 1]; }private: //判断 void _CheckCapacity() { if (_a == NULL) { _capacity += 3; _a = new T[_capacity]; _top2 = _capacity - 1; return; } if (_top1 == _top2) { size_t OldCapacity = _capacity; _capacity = _capacity * 2; T* tmp = new T[_capacity]; for (size_t i = 0; i < _top1; i++) { tmp[i] = _a[i]; } for (size_t j = OldCapacity - 1, i = _capacity - 1; j>_top2; j--, i--) { tmp[i] = _a[j]; } delete[] _a; _a = tmp; _top2 += _capacity / 2; } }private: T* _a; size_t _top1; size_t _top2; size_t _capacity;};
阅读全文
0 0
- 【栈队列】一个数组实现两个栈(共享栈)
- 算法导论学习10.1 两个栈共享一个数组 and 两个栈实现一个队列 and 两个队列实现一个栈
- 两个队列实现一个栈&两个栈实现一个队列
- 两个栈实现一个队列-----两个队列实现一个栈
- 两个栈实现一个队列&&两个队列实现一个栈
- 两个栈实现一个队列 && 两个队列实现一个栈
- 两个栈实现一个队列,两个队列实现一个栈
- 两个栈实现一个队列/两个队列实现一个栈
- 两个栈实现一个队列&两个队列实现一个栈
- 两个队列实现一个栈&两个栈实现一个队列
- 两个队列实现一个栈 / 两个栈实现一个队列
- 两个栈实现一个队列,两个队列实现一个栈
- 两个栈实现一个队列&两个队列实现一个栈
- 两个栈实现一个队列&&两个队列实现一个栈
- 两个栈实现一个队列&两个队列实现一个栈
- 两个栈实现一个队列/两个队列实现一个栈
- 【栈和队列】一个数组实现两个栈
- 两个栈实现一个队列
- java 常用集合list与Set、Map区别及适用场景总结
- 查看Oracle执行计划的几种方法 / oracle中DateTime类型的字段,建立索引后,查寻时索引如何生效?/ oracle 中sql语句怎么加多个强制索引
- CentOS7 下手动配置服务,以指定用户启动进程
- <C语言>“指针数组与数组指针+指针函数与函数指针”---区别理解
- 多文件打包下载PHP
- 【栈队列】一个数组实现两个栈(共享栈)
- 频道拖拽
- Emurasoft.EmEditor.Professional.v9.08.x64.Retail.Incl.Keymaker-ZWT\
- C#基础学习
- Android-控件知识导航
- Android开发 之 BottomNavigationView
- idea内置数据库如何查看表注释
- Openlayers之加载ArcgisServer的切片(TileArcGISRest加载方式)
- can not find xxx.json file,或者文件读取失败,请检查后重新编译。