C++ 两个队列实现堆栈

//构建队列

#include<iostream>
using namespace std;
struct queuenode
{
int data;
queuenode* next;
};
class queue
{
private:
queuenode* head;
public:
queue(){head=new queuenode;head->next=NULL;}
~queue();
void push(int data);
void removenode(int data);
int pop();
void print();
};
void queue:: push(int data)
{
queuenode*p=head;
queuenode*q=new queuenode;
q->data=data;
q->next=NULL;

while(p->next!=NULL)
p=p->next;
p->next=q;

}
int queue::pop()
{
queuenode*p=head->next;
if(p==NULL)
{
cout<<"the queue is empty"<<endl;
return NULL;
}
else
{
head->next=p->next;
cout<<"出队元素:"<<p->data<<endl;
return p->data;
delete p;
p=NULL;
}
}
void queue:: print()
{
queuenode*p=head;
while(p->next!=NULL)
{
cout<<p->next->data<<" ";
p=p->next;
}
cout<<endl;
}
queue::~queue()
{
queuenode*p;
while (head->next)
{
p = head;
head = head->next;
delete p;
}
delete head;
head=NULL;
p=NULL;
}
int main()
{
queue queue1;
queue queue2;
queue1.push (1);
queue1.push (2);
queue1.push (3);
queue1.push (4);
queue1.push (5);
queue1.print();
queue2.push(queue1.pop());
queue2.push(queue1.pop());
queue2.push(queue1.pop());
queue2.push(queue1.pop());
queue1.pop();
queue2.print();
return 0;
}

时间: 2024-12-18 16:39:50

C++ 两个队列实现堆栈的相关文章

【剑指offer】两个队列实现堆栈

转载请注明出处:http://blog.csdn.net/ns_code/article/details/25076689     题目:用两个队列模拟一个栈,即用两个队列的出队和入队操作.来实现栈的出栈和入栈操作.     思路:略微画下草图.便不难想出该题的解决方法.思路例如以下: 如果有两个队列Q1和Q2,当二者都为空时,入栈操作能够用入队操作来模拟.能够随便选一个空队列,如果选Q1进行入栈操作.如今如果a,b,c依次入栈了(即依次进入队列Q1).这时如果想模拟出栈操作,则须要将c出栈,由

两个堆栈实现一个队列和一叠两个队列实现【算法导论课后题】

两个栈实现队列两个队列实现堆栈问题,网上有很多资料.这里仅仅是叙述操作方法的介绍觉得至少. 两个栈实现一个队列 思想:假设两个栈分别为s1,s2.对s1进行入队,出队时,先推断s2是否为空,假设是则将s1中元素压入s2并弹出最上面元素,假设不是,则直接弹出s2最上面的元素. <span style="font-size:18px;">EnQueue(s1,s2,k){ push(s1,k)</span><span style="font-fami

队列和堆栈的区别

如题,队列和堆栈的区别 首先这个问题是非常具有歧义的.堆栈其实是堆和栈,都是内存的不同区域. 那么这里的堆栈,应该不是指内存,而是java.util.Stack<E>(类).应该称之为栈.之所以叫堆栈,应该是某些人的理解问题. 这里的队列,应该是java.util.Queue(接口) 就是说,java集合中的两种数据结构的对比. 一句话形容其区别,就是: 队列是FIFO的(先进先出): 堆栈式FILO的(现今后出): 以上. 队列和堆栈的区别,布布扣,bubuko.com

普通集合和泛型集合的区别,哈希表和字典表的区别,队列和堆栈的区别以及堆和栈的区别。

普通集合和泛型集合的区别: 泛型集合与传统集合相比 类型更安全. 泛型集合无需装箱拆箱操作. 泛型的重要性. 泛型是未来五年的主流技术 ... 通常情况下,建议您使用泛型集合,因为这样可以获得类型安全的直接优点而不需要从基集合类型派生并实现类型特定的成员.此外,如果集合元素为值类型,泛型集合类型的性能通常优于对应的非泛型集合类型(并优于从非泛型基集合类型派生的类型),因为使用泛型时不必对元素进行装箱. 下面的泛型类型对应于现有的集合类型: List 是对应于 ArrayList 的泛型类. Di

两个队列模拟一个栈

#include <iostream> #include <assert.h> #include <queue> using namespace std; /*两个队列模拟一个堆栈*/ /*队列A.B 入栈:将元素依次压入到非空的队列,第一个元素压倒对列A 出栈:把队列A的前n-1个元素倒到队列B,把第n个元素去掉.此时数据在B中,下次操作,则对B操作. 栈顶:把队列A的前n-1个元素倒到队列B,把第n个元素作为栈顶*/ template <typename T&

编程题目: 两个队列实现栈(Python)

感觉两个队列实现栈 比 两个栈实现队列 麻烦 1.栈为空:当两个队列都为空的时候,栈为空 2.入栈操作:当队列2为空的时候,将元素入队到队列1:当队列1位空的时候,将元素入队到队列2: 如果队列1 和 队列2 都为空的时候,那就选择入队到队列1. 3.出队操作:当两个队列都为空的时候,引发错误"栈为空": 当队列2位空的时候,如果队列1中只有一个元素,则直接将队列1中的元素出队: 如果队列1不止一个元素的时候,就将队列1的元素出队然后入队到队列2,知道队列1中只有一个元素,然后将队列1

用两个队列模拟实现一个栈的过程

栈具有"后进先出"的特点,即某个元素最后进入栈,却最先出栈:队列具有"先进先出"的特点,即元素从队尾依次进队列,依次从队头出队列:现在用两个队列模拟实现一个栈的过程,详细过程请看下面这张本人制作的gif图: 实现代码: #include <iostream> using namespace std; #include <queue> template <typename T> class Stack { public: void

用两个队列实现一个栈

前面说了用两个栈实现一个队列的算法,现在在写一个反过来的算法: 1.算法描述: 栈的特点就是先进后出,而队列的特点就是先进先出,基于两者的特点,有了此算法: 先看一张图:都喜欢图,图也能直接表达题的意思和本人的意思: 图中已经说的很清楚了,多余的方法暂且不说,按以上的图和思路,我给出以下代码:供自己参考: /* *设有两个队列A和B,栈的push操作,直接push到A的队尾就行了. *栈的pop操作时,将A中的队列依次取出放到B中,取到最后一个时, *最后一个不要放到B中,直接删掉,再将B中的值

js里实现队列与堆栈

在面向对象的程序设计里,一般都提供了实现队列(queue)和堆栈(stack)的方法,而对于JS来说,我们可以实现数组的相关操作,来实现队列和堆栈的功能,看下面的相关介绍. 一 看一下它们的性质,这种性质决定了它们的使用场合 队列:是一种支持先进先出(FIFO)的集合,即先被插入的数据,先被取出! 堆栈:是一种支持后进先出(LIFO)的集合,即后被插入的数据,先被取出! 二 看一下实现的代码(JS代码) var a=new Array(); a.unshift(1); a.unshift(2);