【转】http://hi.baidu.com/liangjw821/blog/item/74c98ed520f299cc51da4b86.html
原题:
用两个栈实现一个队列的功能?
思路:
假设两个栈 A 和B,且都为空。
可以认为栈 A 为提供入队列的功能,栈 B 提供出队列的功能。
入队列: 入栈 A
出队列:
1 如果栈B 不为空,直接弹出栈 B 的数据。
2 如果栈 B 为空
2.1 若A不为空,则依次弹出栈 A 的数据,放入栈 B 中,再弹出栈 B 的数据。
2.1 若A为空,则队列为空。
int enqueue(stack s1,elemtp x)
{
PUSH(s1,x);
return(1);
}
ElementType dequeue(stack s2,stack s1)
{
if(!empty(s2))//s2 is not empty
{
return POP(s2);
}
else
{
if(empty(s1)
{ printf("队列为空"); exit(0);
}
else
{
while(!empty(s1)
{
ElementType t;
POP(s1,t);
push(s2,t);
}
return pop(s2);
}
}
}
原题:
用两个栈实现一个队列的功能?
思路:
假设两个栈 A 和B,且都为空。
可以认为栈 A 为提供入队列的功能,栈 B 提供出队列的功能。
入队列: 入栈 A
出队列:
1 如果栈B 不为空,直接弹出栈 B 的数据。
2 如果栈 B 为空
2.1 若A不为空,则依次弹出栈 A 的数据,放入栈 B 中,再弹出栈 B 的数据。
2.1 若A为空,则队列为空。
int enqueue(stack s1,elemtp x)
{
PUSH(s1,x);
return(1);
}
ElementType dequeue(stack s2,stack s1)
{
if(!empty(s2))//s2 is not empty
{
return POP(s2);
}
else
{
if(empty(s1)
{ printf("队列为空"); exit(0);
}
else
{
while(!empty(s1)
{
ElementType t;
POP(s1,t);
push(s2,t);
}
return pop(s2);
}
}
}
发表评论
-
gcc gdb常用命令
2010-10-06 11:20 1129gdb 链接: http://fanqiang.chinau ... -
指针数组,数组指针
2010-10-02 14:40 731void test(char* a[]) { ... -
如何用栈实现递归与非递归的转换
2010-04-10 15:18 950http://bbs.chinaunix.net/viewth ... -
华为笔试2
2009-06-16 09:37 984【转】http://hi.baidu.com/xiao1dia ... -
华为笔试1
2009-06-16 09:35 1020【转】http://hi.baidu.com/xi ... -
嵌入式程序员应该知道的16个问题
2009-05-29 15:41 1066【转】http://blog.csdn.net/s ... -
嵌入式程序员应该知道的16个问题
2009-05-29 15:39 1513【转】http://blog.csdn.net/seraphs ... -
嵌入式程序员应该知道的16个问题
2009-05-29 15:38 883【转】http://blog.csdn.net/s ... -
嵌入式程序员应该知道的16个问题
2009-05-29 15:37 882【转】http://blog.csdn.net/s ... -
c预编译 #define相关
2009-05-29 15:14 1194#是生成字符串: #define a(x) ... -
排序算法和二分查找
2009-05-17 15:50 827using namespace std; #includ ... -
C移位
2009-05-15 09:56 1367【转】 C提供了六种位运算运算符;这些运算符可能只允许整型操作 ... -
sizeof union struct 内存对齐
2009-05-14 20:30 2546【转】http://www.programfan.com/bl ... -
求100的阶乘
2009-05-06 16:32 1554#include <stdio.h> int m ... -
字符串操作
2009-05-03 15:19 816#include "stdafx.h" ... -
C字符串反转
2009-05-03 10:53 1798更改下面程序 #include string.h ... -
C链表相关
2009-05-03 10:38 784#include "stdafx.h" ... -
C题库连接
2009-04-29 09:28 763http://blog.chinaunix.net/u2/64 ...
相关推荐
要使用两个栈实现队列,我们需要一个入队栈(pushStack)和一个出队栈(popStack)。入队操作(enqueue)相当于向pushStack中添加元素,而出队操作(dequeue)则涉及将pushStack中的元素转移到popStack,然后从pop...
用量个栈实现一个队列,使其可以有进队和出队的操作。
### 使用两个栈实现队列功能 #### 背景与目的 在计算机科学领域中,数据结构是存储和组织数据的方式之一,对于提高程序效率至关重要。队列是一种先进先出(FIFO)的数据结构,而栈则是一种后进先出(LIFO)的数据...
在C++中,循环队列通常用数组实现,通过两个指针分别指向队头和队尾,队列的入队(enqueue)和出队(dequeue)操作可以通过简单的指针移动来完成,避免了数组扩容的开销。 最后,我们讨论链队列。链队列是基于链表...
标题“C++实现用栈实现队列的功能”表明我们将使用C++编程语言,通过创建两个栈来实现队列的主要功能:入队(enqueue)和出队(dequeue)。这种方法的思路是,一个栈用于入队操作,另一个栈用于出队操作,以此来克服...
在分析算法的时间复杂度时,我们发现如果用两个栈实现队列,add操作的时间复杂度为O(1),delete操作的时间复杂度可能为O(n),因为在某些情况下我们需要将stack1中的所有元素转移到stack2中。然而,在实际操作中,...
- `libQueue.c` 和 `libQueue.h`:这是实现队列功能的源代码文件。`libQueue.c`包含了队列的实现,如初始化、插入、删除等操作;`libQueue.h`则是头文件,声明了相关的函数接口供其他模块调用。 - `libStack.c` 和...
通过这种方式,我们可以有效地用两个栈实现队列的基本功能,即“入队”和“出队”。 这种数据结构设计思路在实际编程中有着广泛的应用,比如在解决某些限制内存访问顺序的问题时,或者在需要高效地进行特定操作(如...
在本文中,作者通过创建一个名为`Queue`的构造函数来实现队列,该构造函数具有push、pop、size和display方法。然后,使用两个这样的队列(arr1和arr2)来模拟栈的行为。以下是关键步骤: 1. 当需要push元素时,可以...
问题:有两个栈s1和s2,实现队列的push和pop功能。 一般思路:始终维护s1作为存储空间,并以s2作为临时缓冲区。s1实现入队操作,s2实现出队操作。 1,入队时,将元素压入s1。 2,出队时,将s1的元素逐个...
要求用两个栈{stack1,stack2}实现一个队列,也就是说我们需要使用栈的push和pop功能来构造队列的push和pop功能。 栈我们用列表表示,相应的功能使用append和pop函数实现。 队列的push功能: 使用stack1来存储元素,...
本篇将详细解释如何使用两个栈(stack)来模拟实现一个队列(queue)的功能。 首先,我们要理解栈和队列的基本特性。栈是一种后进先出(LIFO,Last In First Out)的数据结构,其操作主要包括压入(push)和弹出...
通过两个栈 `s1` 和 `s2` 来模拟队列的操作,不仅可以实现队列的基本功能,而且还能保证良好的性能。这种方法的关键在于有效地利用了栈的特性,并通过巧妙地转换操作顺序来实现队列的行为。虽然每次出队操作可能涉及...
同样,"232栈实现队列.cpp"文件可能是用栈来实现队列的逻辑,这种实现称为双栈队列。这里通常会用到两个栈,一个用于入队,一个用于出队,以保持队列的FIFO特性。 数据结构的选择取决于具体的问题需求。例如,栈常...
通过使用栈和队列,可以分别存储字符串的前半部分和后半部分,然后比较两个部分是否相同,以判断字符串是否是一个回文。 下面是使用栈和队列实现回文检测功能的示例代码: 首先,我们需要定义栈和队列的结构体: ...
标题“通过2个栈模拟队列”指出我们将探讨如何使用两个栈来实现队列的基本操作,如入队(enqueue)和出队(dequeue)。这种方法主要针对那些无法直接使用队列数据结构,但又需要队列功能的场景。 描述中提到的...
C++基础学习之利用两个栈实现一个队列 本文主要介绍了如何使用两个栈实现一个队列,通过...本文旨在帮助读者更好地理解和掌握C++编程技术,提供了一个使用两个栈实现队列的示例代码,可以作为读者学习和参考的资料。
栈和队列是计算机科学中两个基本的数据结构,它们的基本操作包括进栈、出栈、进队、出队等。栈是一种后进先出的数据结构,即最后一个入栈的元素将是第一个出栈的元素。队列是一种先进先出的数据结构,即第一个入队的...
这种实现方法虽然在pop操作时可能会有额外的时间开销(如果栈2为空,需要转移所有元素),但在某些情况下,如空间限制或特定应用场景下,使用两个栈实现队列可能比直接使用Java提供的Queue接口更具优势,因为它避免...