C++ 超过了使用两个堆栈实现队列的时间限制
上述问题需要使用两个堆栈实现队列。 所以我要做的是回答三种类型的问题C++ 超过了使用两个堆栈实现队列的时间限制,c++,class,stack,queue,C++,Class,Stack,Queue,上述问题需要使用两个堆栈实现队列。 所以我要做的是回答三种类型的问题 排队 出列 打印头 我的代码如下: /* #包括 #包括 使用名称空间std; 类QueueTwoStack{ 堆栈s1; 堆栈s2; 公众: 无效排队(int x); void dequeue(); int Front(); }; void QueueTwoStack::enqueue(int x){//enqueue 而(!s1.empty()){ s2.推(s1.顶()); s1.pop(); } s1.推(x); 而(
#包括
#包括
使用名称空间std;
类QueueTwoStack{
堆栈s1;
堆栈s2;
公众:
无效排队(int x);
void dequeue();
int Front();
};
void QueueTwoStack::enqueue(int x){//enqueue
而(!s1.empty()){
s2.推(s1.顶());
s1.pop();
}
s1.推(x);
而(!s2.empty()){
s1.推(s2.顶());
s2.pop();
}
}
void QueueTwoStack::dequeue(){//dequeue
如果(!s1.empty())
s1.pop();
}
int QueueTwoStack::Front(){//返回前端
返回s1.top();
}
int main(){
队列堆栈队列;
int q,ch,x;
cin>>q;
而(q--){
cin>>ch;
如果(ch==2)
Queue.dequeue();
否则如果(ch==3)
cout您正在堆栈s1
中维护一个完全排序的队列,通过将所有s1
推入s2
,添加下一个元素,然后将所有s2
推回s1
来排队元素。这不是很理想
相反,让我们调用堆栈in
和out
。开始时,这两个堆栈都是空的:
in: <top>
out: <top>
出列元素只需将它们从中拉出
——注意,如果中的为空,我们首先将中的所有转移到中
:
Dequeue:
in: 1 2 3 <top>
out: <top> <- empty! Transfer
in: <top>
out: 3 2 1 <top>
Out no longer empty, pop 1:
in: <top>
out: 3 2 <top>
出列:
在:1 2 3
out:对于每个新元素,清空堆栈两次。将所有堆栈从s1推到s2,然后返回到s1。可以使用一个堆栈推送新的堆栈(s1),使用一个堆栈弹出(s2)。如果s2为空,则将s1的所有元素都推入s2。请提供一个示例,说明您的代码应该做什么?我无法读取您的黑客等级链接1)为自己找一个编译器。2)将失败的测试用例复制到文件中。3)重写代码,以便从该文件中读取。4)调试程序。
Add 1:
in: 1 <top>
out: <top>
Add 2:
in: 1 2 <top>
out: <top>
Add 3:
in: 1 2 3 <top>
out: <top>
Dequeue:
in: 1 2 3 <top>
out: <top> <- empty! Transfer
in: <top>
out: 3 2 1 <top>
Out no longer empty, pop 1:
in: <top>
out: 3 2 <top>