Очередь
Структура данных очередь (англ. queue) поддерживает две операции:
push()
- добавить элемент в конец очередиpop()
- удалить элемент из начала очереди
Первым из очереди удаляется элемент, который был помещен туда первым, то есть в очереди реализуется принцип «первым вошел — первым вышел» (англ. first-in, first-out — FIFO)
Дек
Структура данных дек (англ. double ended queue) поддерживает следующие операции:
push_back()
- добавить элемент в конец очередиpop_back()
- удалить элемент из конца очередиpush_front()
- добавить элемент в начало очередиpop_front()
- удалить элемент из начала очереди
Дек поддерживает как FIFO, так и LIFO, поэтому на его основе можно реализовать стек и обычную очередь.
Как пользоваться
Python
В стандартной библиотеке collections
есть реализация дека. Его же надо использовать и для очереди.
from collections import deque
a = deque([1, 2])
a.append(3)
a.appendleft(4)
print(a) # deque([4, 1, 2, 3])
print(a[0]) # 4
print(a.popleft()) # 4, удаляет элемент и возвращает его
print(a[-1]) # 3
print(a.pop()) # 3, удаляет элемент и возвращает его
print(a) # deque([1, 2])
C++
Очередь
#include <iostream>
#include <queue>
using namespace std;
int main() {
queue<string> animals;
// push elements into the queue
animals.push("Cat");
animals.push("Dog");
while (!animals.empty()) {
cout << animals.front() << " ";
animals.pop();
}
// Output: Cat Dog
}
Дек
#include <iostream>
#include <deque>
using namespace std;
int main() {
deque<int> d = {7, 5, 16, 8};
d.push_front(13);
cout << d.front() << '\n'; // 13
d.pop_front();
d.push_back(25);
cout << d.back() << '\n'; // 25
d.pop_back();
for (int n: d) {
cout << n << ' ';
}
// Output: 7 5 16 8
}