//用两个栈实现队列的功能//假设有两个栈s1与s2,则s1保存刚刚入队的元素,若需出队且s2为空,则将s1所有元素压入s2(此时s2中元素顺序为元素入队顺序),然后取出s2栈顶即可,若s2非空(此时s2中元素为s1之前压入,其栈顶就是最早入队的元素),则直接取出s2的栈顶。template cla...
分类:
其他好文 时间:
2015-04-06 23:06:56
阅读次数:
155
在一个数组中实现两个栈,当数组未填满是任一个栈不能溢出。解法是将一个栈从头开始往后插入,而另一个从后往前插入,如果插入一个元素后,两个栈的top指针未相遇,则表示数组未满,栈没有溢出。#include "stdafx.h"
#include using namespace std;
struct special_stack
{
int capcity;
int l...
分类:
编程语言 时间:
2015-04-05 10:33:35
阅读次数:
402
思路:
本题目的解法是用到了两个栈,一个用来存元素,另一个用来存最小元素,元素入栈时和minStack栈里面的栈顶元素相比,小于栈顶元素则存入,大于栈顶元素则栈顶元素(当前元素中的最小值)入栈。其中,需要注意的是元素出栈时,要随时更新当前栈中的最小元素min=minStack.top()...
分类:
其他好文 时间:
2015-04-04 21:16:38
阅读次数:
168
两个栈模拟一个队列,1号栈为入队,栈顶表示队尾;2号栈为出队,栈顶表示队首。
入队,直接进1号栈;出队,先判断2号栈是否有元素,有元素就直接弹出栈顶即队首,如果2号栈没有元素,则将1号栈的元素顺序弹出并进2号栈。
[cpp] view
plaincopy
#include
#include
#include
using name...
分类:
其他好文 时间:
2015-04-01 15:25:38
阅读次数:
139
主要实现从尾部添加字符和从头部删除字符 从尾部添加直接push进一个stack1即可 从头部删除,需要先将stack1中的字符压入stack2,然后从stack2弹出,这样顺序才对 考虑一种情况,先push进a和b,弹出a,再压入c,再弹出的话要弹出b 在将stack1的数压入stack2之前要判断...
分类:
其他好文 时间:
2015-03-30 22:59:57
阅读次数:
196
1.介绍 算术表达式的计算,是比较常见的问题,但这个问题的背后隐藏着栈的思想。 这里就介绍使用两个栈来计算表达式的方法。 2. 算法 2.1 定义: a) 建立两个栈: 一个是数据栈dataStak,用于存放数据; 一个是符号栈operatorStack,用于存放运算符; b) 建立运算符号之间的优...
分类:
其他好文 时间:
2015-03-27 23:39:40
阅读次数:
239
【练习3.21】编写仅用一个数组而实现两个栈的例程。除非数组的每一个单元都被使用,否则栈例程不能有溢出声明。Answer:很简单,一个栈从数组头起,一个栈从数组尾起,分别保留左右栈头索引。如left=5则表示array[0]~array[4]为左栈元素,right=7则表示array[8]~arra...
分类:
编程语言 时间:
2015-03-21 00:59:42
阅读次数:
830
它们之间的区别在于运算符相对与操作数的位置不同。将中缀表达式转换为前缀表达式:遵循以下步骤:(1) 初始化两个栈:运算符栈S1和储存中间结果的栈S2;(2) 从右至左扫描中缀表达式;(3) 遇到操作数时,将其压入S2;(4) 遇到运算符时,比较其与S1栈顶运算符的优先级:(4-1) 如果S1为空,或...
分类:
其他好文 时间:
2015-03-20 06:54:53
阅读次数:
165
1、题目避免重复利用随机数生成运算式,构造两个栈,将生成的结果输入到栈里,利用栈的结构特点,进行匹配,相同的删除,不同的保留。避免过高的比较次数,可以设定,当新生成的结果与之前的比较结果比较次数达到30次时,如果没有重复,保留这次产生的运算式。2、可制定(数量/打印方式)定义变量,通过对变量的控制达...
分类:
其他好文 时间:
2015-03-13 14:06:28
阅读次数:
112
相较普通的栈,题目要求多实现一个操作getMin(): 获取栈中最小的元素
我们维护两个栈:普通栈s保存所有元素, 最小栈min_s保存s中的“曾出现过”的最小元素的递减序列。
min_s.top()即为getMin()的返回值,标识普通栈s里的最小元素。
考虑压栈 3 4 5 2 3 1, 它们有如下表现:
push 3 4 5 2 3 1
s 3...
分类:
其他好文 时间:
2015-02-24 11:27:50
阅读次数:
133