Предыдущий пост -

Очередь queue на двух стеках.

Рубрика: C++, Дата: 14 May, 2013, Автор:

Определите очередь (queue), используя (только) два стека.

Простенькая задачка как оказалось, нужно просто данные хранить в одном стеке, а при выводе элемента или при доступе к нему мы просто данные переписываем в другой стек, затем чтобы на вершине стека оказался элемент которые первый попал в стек. Как мы помним очередь это такая структура данных в которой элемент первый вошол и первый вышел, а стек это, когда элемент первый вошол последним вышел. Вот мой примерчик:

#include <iostream>
using std::cout;
using std::endl;
#include <stack>
using std::stack;

class queue
{
	stack<int> s1;
	stack<int> s2;
public:
	void push(int n)
	{
		s1.push(n);
	}
	void pop()
	{
		while(!s1.empty())
		{
			s2.push(s1.top());
			s1.pop();
		}
		s2.pop();
		//добавляем элементы обратно
		while(!s2.empty())
		{
			s1.push(s2.top());
			s2.pop();
		}
	}
	void print()
	{
		while(!s1.empty())
		{
			s2.push(s1.top());
			s1.pop();
		}
		//вывод элементов
		while(!s2.empty())
		{
			cout <<s2.top()<<' ';
			s1.push(s2.top());
			s2.pop();
		}
	}
};

int main()
{
	queue q;
	q.push(1);
	q.push(2);
	q.push(3);

	q.print();
	cout <<endl;

	//удаляем элемент очереди
	q.pop();
	q.print();
	cout <<endl;

	//удаляем элемент очереди
	q.pop();
	q.print();
	cout <<endl;

	return 0;
}

[youtube]http://www.youtube.com/watch?v=UCt6PM__oPE[/youtube]

  • Евгений

    ВошЕл

rss