Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <fstream>
- using namespace std;
- ifstream in("input.txt");
- ofstream out("output.txt");
- template <class Item> //класс-шаблон очередь
- class Queue
- {
- struct Element
- {
- Item inf;
- Element *next;
- Element (Item x) : inf(x), next(0) {}
- };
- Element *head, *tail; //указатели на начало и конец очереди
- public:
- Queue() : head(0), tail(0) {}
- bool Empty()//возвращает true, если очередь пуста, иначе false
- { return head == 0; }
- Item GetElement()
- {
- if (Empty()) { ; } //если пусто ничего не делаем
- else //иначе извлекаем элемент из головы очереди
- {
- Element *t = head;
- Item i = t->inf;
- head = t->next;
- if (head == NULL)
- tail = NULL;
- delete t;
- return i;
- }
- }
- void PutElement(Item data)
- {
- Element *t = tail; //устанавливаем вспомогательный указатель на последний элемент очереди
- tail = new Element(data); //формируется новый элемент, на который будет указывать tail
- if (!head)
- head = tail;
- else
- t->next = tail; //иначе новый узел помещаем в конец очереди
- }
- Item TopElement()
- {
- if (Empty()) { ; } //если пусто ничего не делаем
- else //иначе извлекаем элемент из головы очереди
- {
- return head->inf;
- }
- }
- };
- int main()
- {
- Queue <int> x;
- Queue <int> y;
- int q, e = 0;
- while (in >> q) //вводим в очередь эл-ты
- {
- x.PutElement(q);
- }
- int min = x.TopElement();
- while (!x.Empty()) // пока очередь х не пуста
- {
- e = x.GetElement();
- if (min > e) //находим минимальный эл-нт
- min = e;
- y.PutElement(e);
- }
- while (!y.Empty()) // пока очередь y не пуста
- {
- e = y.GetElement();
- if (e != min) // если элемент не равен минимальному, добавляем его в пустую очередь x
- x.PutElement(e);
- }
- while (!x.Empty()) //пока очередь x не пуста
- out << x.GetElement() << " "; // выводим элемент в файл out
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement