每日一题16:在一个数组中实现两个栈
来源:互联网 发布:苹果电脑软件怎么卸载 编辑:程序博客网 时间:2024/05/16 18:03
在一个数组中实现两个栈,当数组未填满是任一个栈不能溢出。解法是将一个栈从头开始往后插入,而另一个从后往前插入,如果插入一个元素后,两个栈的top指针未相遇,则表示数组未满,栈没有溢出。
#include "stdafx.h"#include <iostream>using namespace std;struct special_stack{ int capcity; int ltop,rtop; int* vals;};special_stack* create(int capacity){ special_stack* sstack = new special_stack; sstack->vals = new int[capacity]; sstack->capcity = capacity; sstack->ltop = -1; sstack->rtop = capacity; return sstack;}bool lpush(special_stack** sstack,int val){ if((*sstack)->ltop + 1 == (*sstack)->rtop) return false; (*sstack)->vals[++((*sstack)->ltop)] = val; return true;}bool lpop(special_stack** sstack,int& val){ if((*sstack)->ltop < 0) return false; val = (*sstack)->vals[((*sstack)->ltop)--]; return true;}bool rpush(special_stack** sstack,int val){ if((*sstack)->rtop - 1 == (*sstack)->ltop) return false; (*sstack)->vals[--((*sstack)->rtop)] = val; return true;}bool rpop(special_stack** sstack,int& val){ if((*sstack)->rtop >= (*sstack)->capcity) return false; val = (*sstack)->vals[((*sstack)->rtop)++]; return true;}void destroy(special_stack** sstack){ delete [](*sstack)->vals; delete (*sstack); *sstack = NULL;}void clear(special_stack** sstack){ (*sstack)->ltop = -1; (*sstack)->rtop = (*sstack)->capcity;}int _tmain(int argc, _TCHAR* argv[]){ special_stack* stack = create(20); for (int i = 1; i <= 10; ++i) { lpush(&stack,i); rpush(&stack,i + 10); } for (int i = 1; i <= 10; ++i) { int val; if(lpop(&stack,val)) cout<<val<<' '; } cout<<endl; for (int i = 1; i <= 10; ++i) { int val; if(rpop(&stack,val)) cout<<val<<' '; } cout<<endl; for (int i = 1; i <= 10; ++i) { lpush(&stack,i); rpush(&stack,i + 10); } cout<<lpush(&stack,21)<<endl; cout<<rpush(&stack,31)<<endl; int val; lpop(&stack,val); rpop(&stack,val); cout<<lpush(&stack,21)<<endl; cout<<rpush(&stack,31)<<endl; destroy(&stack); return 0;}
0 0
- 每日一题16:在一个数组中实现两个栈
- 在一个数组中实现两个堆栈
- 在一个数组中实现两个堆栈
- 每日一练--一个数组实现三个栈
- 每日一题(36) - 用两个栈实现队列
- 每日一题(37) - 两个队列实现栈
- 4-7 在一个数组中实现两个堆栈
- 每日一题(33)——用两个栈实现一个队列的功能?要求给出算法和思路
- 【每日一题】2012.5.26:输入两个数组中相同的元素
- 一个数组实现两个栈
- 一个数组实现两个栈
- 一个数组实现两个栈
- 一个数组实现两个栈
- 一个数组实现两个栈
- 一个数组实现两个栈
- 一个数组实现两个栈
- 一个数组实现两个栈
- 一个数组实现两个栈
- Python Show-Me-the-Code 第 0000 题 图片右上角加数字
- 杭电ACM——1231
- 亲和数 2040
- (9.1.2)线性代数之矩阵运算
- HDU 5099 Gunner
- 每日一题16:在一个数组中实现两个栈
- 数值分析2.1 Gauss(高斯)消去法
- cocos2d-x 优化(纹理渲染优化、资源缓存、内存优化)
- 【BestCoder】HDU 5199 Gunner
- 关于uitextfield
- Palindrome Number
- Scala函数式编程原理
- Linux vim 指定编码打开文件
- 黑马程序员——JAVA基本常识