#include<iostream>
usingnamespacestd;
#include<stack>
#include<queue>
#include<assert.h>
//template<classT>
//两个栈实现一个队列
//classStackToqueue
//{
//public:
// StackToqueue()
// {}
// voidPush(constT&x)
// {//始终保持..
分类:
其他好文 时间:
2016-05-17 22:47:11
阅读次数:
187
题意:设计一个能输出栈内最小值的栈 该题设计两个栈,一个栈是正常的栈s,而另一个是存最小值的栈sm 在push时要判断sm是否为空,如果为空或者非空但是栈顶元素大于等于插入值的 需要在sm中插入x 同样地在pop时,s的元素被删除了,那么sm中的也应该被删除。 通过这些操作维护sm能很巧妙在O(1) ...
分类:
其他好文 时间:
2016-05-16 12:42:37
阅读次数:
178
用两个栈实现一个队列
1、线性表分为:顺序表和链表。
栈:只允许在尾上(即是栈顶)进行插入与删除。
队列:它是在队尾插入,队头删除。
2、栈选数组(即顺序表)结构时(比选链表结构更好):因为选数组结构可以进行size++与size--,而且效率高。
栈选链表结构:
3、队列选数..
分类:
其他好文 时间:
2016-05-15 20:09:11
阅读次数:
147
思路:栈s1和栈s2,s1用来Push数据,s2用来Pop数据入队:数据直接压入栈s1中出队:若s2为空,则把s1中除过最后一个压入的元素全部移入s2中,然后弹出s1的栈顶元素若s2不为空,直接弹出s2的栈顶元素#define_CRT_SECURE_NO_WARNINGS1#include<iostream>#include<stack&g..
分类:
其他好文 时间:
2016-05-15 19:59:30
阅读次数:
210
要2个栈公用一个存储空间看来栈顶指针只能从两端开始了 设2个栈为栈1,栈2 ,栈1初始的栈顶指针为-1,栈2的初始栈顶指针为Size ...
分类:
编程语言 时间:
2016-05-14 20:11:29
阅读次数:
212
定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数。
1、用两个栈。2、用迭代器。3、用其他辅助集合类...
分类:
其他好文 时间:
2016-05-14 11:30:07
阅读次数:
177
顺序栈——双栈(Dual Stack)
1. 双栈的概念
1.1 双栈的定义
双栈是指两个顺序栈,是一种特殊的顺序栈。
1.2 双栈中各元素的逻辑及存储关系
双栈共享一个地址连续的存储单元。即程序同时需要两个栈时,可以定义一个足够的栈空间,该空间的两端分别设为两个栈的栈底,用bottom[0]=-1和bottom[1]=maxSize指示。
压入数据时,让两个栈的栈顶top[0]和top[1]都向中间伸展,如...
分类:
其他好文 时间:
2016-05-14 06:50:23
阅读次数:
372
1、两个栈实现一个队列 有三种思路: 思路一:将stack1作为存储空间,将stack2作为临时缓冲区,入队时,直接压入stac1,出队时,将stack1中的元素依次出栈压入stack2中,再将stack2的栈顶元素弹出,最后将stack2中的元素再倒回给stack1 思路二:入队时,判断stack ...
分类:
其他好文 时间:
2016-05-13 20:38:54
阅读次数:
132
如何用O(1)的时间复杂度求栈中最小元素解题思路:
我们经常会采用空间换取时间提高时间复杂度。我们可以使用两个栈结构,一个栈用来存储数据,另一个栈用来存储栈中的最小元素。思路如下:如果当前入栈的元素比原来栈中的最小值还小,则把这个值压入保存最小元素的栈中;在出栈时,如果当前入栈的元素恰好为当前栈中的最小值,保存最小值的栈顶元素也出栈,使得当前最小值变为其入栈之前的那个最小值。
实现代码如下:pa...
分类:
编程语言 时间:
2016-05-13 03:06:07
阅读次数:
162
1.用两个栈实现队列
分析:队列的特点是“先进先出”,而栈的特点是“后进先出”,入队列时让所有的元素进到stack1中,出队列时先判断stack2是否为空,不为空直接pop即可,若为空,将stack1中所有的元素“倒入”stack2中,这样就用两个栈实现了队列。
实现代码:
class Solution
{
public:
void push(int node) {
...
分类:
其他好文 时间:
2016-05-12 16:28:22
阅读次数:
149