#include
#include
using namespace std;
int main() {
stack box;
for (auto n = 1; n < 10; ++n) box.push(n);
while (!box.empty()) {
cout
Другие языки программирования и технологии
Как реализовать cтек с помощью очереди?
И очередь, и стек эффективно реализуются списками, но по-разному. Николай Веселуха как раз реализацию списком и предложил. Но это НЕ "с помощью очереди".
С помощью очереди - эффективных реализаций не существует.
Очередь: добавляем в хвост, извлекаем из головы.
Стек: добавляем в голову, извлекаем из головы (такой вариант позволяет использовать однонаправленный список, тогда как "добавление в конец и удаление с конца" потребует двунаправленного списка).
Извлечение элементов у списка и очереди идентично но вставка при реализации стека очередью потребует ещё одной очереди и множества копирований:
С помощью очереди - эффективных реализаций не существует.
Очередь: добавляем в хвост, извлекаем из головы.
Стек: добавляем в голову, извлекаем из головы (такой вариант позволяет использовать однонаправленный список, тогда как "добавление в конец и удаление с конца" потребует двунаправленного списка).
Извлечение элементов у списка и очереди идентично но вставка при реализации стека очередью потребует ещё одной очереди и множества копирований:
создаём временную очередь temp
заносим temp новый элемент
переносим все элементы из основной очереди в temp
переносим все элементы из temp в основную очередь
Типичное удаление гланд через задницу. Даже если просто менять очереди местами (без переноса из temp в основную очередь), получается крайне неэффективно.
Дима Швец
А как же std::list
Дима Швец
И такой вариант возможен
Эмулировать с помощью двух очередей.
Стек подразумевает две операции - добавление в конец и удаление с конца.
Очередь отличается тем, что удаляет с начала.
Костыльная реализация стека через очередь усложнит одну из двух операций до O(n).
Например, добавлять мы можем как в очередь, а при удалении перегонять все элементы, кроме последнего, в другую очередь, и возвращать последний элемент.
Очередь отличается тем, что удаляет с начала.
Костыльная реализация стека через очередь усложнит одну из двух операций до O(n).
Например, добавлять мы можем как в очередь, а при удалении перегонять все элементы, кроме последнего, в другую очередь, и возвращать последний элемент.
Похожие вопросы
- Как в C++ разбить число на цифры и вывести их через пробел? Решение задачи реализовать с помощью конструкции switch.
- Pascal, структура данных "Cтек"
- Как вы думаете эту идею можно реализовать если нет начального капитала?
- Как можно реализовать на практике нижеописанный формат видеоуроков?
- Помогите реализовать на C#
- Разработать класс описывающий множество точек на плоскости, реализовать метод который возвращает наименьшее расстояние
- Какой наиболее лаконичный способ реализовать Line::intersect(Line) в С++?
- Как на c++ реализовать прием строки произвольного размера из консоли?
- Помогите описать процедуру, которая подсчитывает количество элементов очереди, у которых равные "соседи".
- С помощью какой программы можно нарисовать такие картинки ?