在知乎上看到这道题目,就实现了下看看。如有错误,麻烦各位看官留言指导下。首先两个栈实现一个队列的思路是这样的: (1)用栈A作为队列的入口,只提供入队操作, 用栈B作为队列的出口,只提供出口。 (2)由于栈的特性是后进先出, 队列是先进先出, 若要出队(即把栈A最底层的元素pop出来), 需...
分类:
编程语言 时间:
2015-08-21 13:09:55
阅读次数:
250
问题:
假设有这样一个拥有3个操作的队列:
1. EnQueue(v): 将v加入队列中
2. DeQueue(): 使队列中的队首元素删除并返回此元素
3. MaxElement: 返回队列中的最大元素
设计一种数据结构和算法,让MaxElement操作的时间复杂度尽可能地低。
思路:
(1)用两个栈设计一个新的数据类型(数据类型定义为MyStack),其中一个栈用来存...
分类:
其他好文 时间:
2015-08-21 00:21:47
阅读次数:
287
根据我的通过来看,首先这道题里面没有小数,如果存在除不尽的情况,也是按取整来算。
本题建立了两个栈,一个存储数字的数字栈,一个存储加减乘除的符号栈。在处理字符串的时候,每次找到一个数字时,放进一个string的临时变量里,因为会存在十位以上的情况;每次找到一个符号时,首先将string变量转int放入数字栈,然后检查符号栈的栈顶符号是否为乘或者除,如果是就从符号栈弹出顶,从数字栈弹出两个数,计算...
分类:
其他好文 时间:
2015-08-20 18:54:24
阅读次数:
179
题目
定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的min函数.在该栈中,调用min,push及pop的时间复杂度都是O(1).思路
使用两个栈,一个数据栈用来存放数据,一个辅助栈用来存放最小值.#include
#include template class StackWithMin
{
publi...
分类:
其他好文 时间:
2015-08-20 16:55:34
阅读次数:
145
题目描述:按之字形顺序打印二叉树
请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。解析:
要分层打印,不能用常规方法,访问一个节点后,将该节点的左右子节点压入队列。
奇数层从左到右打印,偶数层从右向左打印。使用两个栈存储每一层的节点。
在访问奇数层时,将奇数层的子节点,按先左后右的顺序将子节点压入偶...
分类:
其他好文 时间:
2015-08-18 19:34:11
阅读次数:
162
题目
输入两个链表,找出他们的第一个公共节点。下面第一个公共节点便是40。
1->2->3----- >40->50
10->20->30----/
思路
看到栈就忽然恍然大悟,然后在看到类似快慢指针,更大悟。
思路一:
分别遍历第一条链表和第二条链表,将其每个节点分别存入两个栈,然后依次出栈,最后一个相同的的栈...
分类:
其他好文 时间:
2015-08-18 12:07:57
阅读次数:
119
实现使用两个堆栈队列FIFO队列是一种数据结构(FIFO),后堆叠前进出的数据结构的(FILO)。两个栈实现的最简单的方法就是排队:队列中的第一个推栈,队列将数据顺序的第一个堆栈推入第二堆叠,然后叠加.两个规则:1)进队列,则直接压入第一个栈2)出队列,若果第二个栈不为空。直接pop(),如过第二个...
分类:
其他好文 时间:
2015-08-12 21:36:47
阅读次数:
120
栈 : 先进后出! ????????队列 : 先进先出! ????????那么怎么用栈来实现队列呢? ????第一版: ????????push() ?: ?直接将元素进栈1; ????????pop() ?: ?栈1 元...
分类:
其他好文 时间:
2015-08-10 13:45:26
阅读次数:
102
1.前缀表达式叫波兰式,后缀叫逆波兰式 2.中缀表达式转另外两个比较简单,前后缀装中缀较麻烦 3.问题分求表达式还是求值,如果是求值则需要两个栈,一个是操作符栈,一个是操作数栈,等操作符栈入栈完毕后依次出栈,并把操作数栈顶两个操作数计算并将 结果重新压入栈 4.只有中缀表达式有括号一说...
分类:
其他好文 时间:
2015-08-08 13:29:22
阅读次数:
198