在c++中,enqueue/dequeue和push/pop有什么区别?



我从网上得到了各种各样的信息。

在谷歌上快速搜索一下我的问题,会得到很多结果,说它们是分开的,操作方式不同。队列的Enqueue/dequeue,堆栈的push/pop。

例如:数据结构:解释pop, push, dequeue, enqueue在这类练习中的作用

然而在现实中,push/pop对栈和队列都有效。在堆栈中,Push添加到堆栈顶部,而Pop从堆栈顶部移除。在队列中,Push添加到队列的后面,而Pop从队列的前面删除。

如下所示:https://www.geeksforgeeks.org/queue-cpp-stl/https://www.geeksforgeeks.org/stack-in-cpp-stl/

怎么了?是的,这是有区别的,但是为什么在push/pop做同样的事情时使用enqueue/dequeue ?当使用队列时,推/弹出是否可以互换使用?我觉得我错过了什么。

感谢

#include <stdio.h>
#include <iostream>
using namespace std;
#include <stack>
#include <queue>
stack<int> CreateStack(int Array[], int length)
{
stack<int> stk;
for (int i = 0; i < length; i++)
{
stk.push(Array[i]);
}
return stk;
}
queue<int> CreateQueue(int Array[], int length)
{
queue<int> que;
for(int i = 0; i < length; i++)
{
que.push(Array[i]);
}
return que;
}

void printStack(stack<int> inputStack)
{
cout << "Top of the stack" << endl;
while(inputStack.empty() == false)
{
cout << inputStack.top() << endl;
inputStack.pop();
}
cout << "Bottom of the stack" << endl;
}
void printQueue(queue<int> inputQueue)
{
cout << "Front of the queue" << endl;
while(inputQueue.empty() == false)
{
cout << inputQueue.front() << endl;
inputQueue.pop();
}
cout << "Back of the queue";
}

int main()
{
int stackArray[] = {2,4,6,8,10};
int arraySize = sizeof(stackArray)/sizeof(stackArray[0]);
stack<int> stk = CreateStack(stackArray, arraySize);
queue<int> que = CreateQueue(stackArray, arraySize);
printStack(stk);
printQueue(que);
}

打印:

栈顶

10

8

64

2

栈底

在队列前面

2

4

68

10

队列后面

两个容器之间的差异意味着不同的术语最适合描述读取和编写使用它们的代码的人所发生的事情!

当您意识到堆栈是LIFO(后进先出)容器时,而队列是FIFO(先进先出)容器,如果您参考这些url (https://en.cppreference.com),您可以看到它们确实有一系列操作符,这些操作符是第三个容器,双端队列或deque的子集。

最新更新