Подразделы

Другие разделы

Дата и время

19/03/2024 13:43:04

Авторизация

Имя:
Пароль:
Зарегистрироваться
Восстановить пароль
 

print2290. (очередь) Операции над очередью

print(очередь) Операции над очередью

Ограничения: время – 2s/4s, память – 32MiB Ввод: input.txt или стандартный ввод Вывод: output.txt или стандартный вывод copy
Послать решение Blockly Посылки Темы Где Обсудить (0)


Реализовать функции работы с Очередью (операция вставки и взятия из очереди)
Используйте следующий шаблон программы (Внимание! Обратите внимание на описание внутри main!):
#include <iostream>
#include <conio.h>
#include <limits.h>
using namespace std;

const int M=8; // длина массива, отводимого под очередь

// прототипы функций
bool PutInQueue(int);
int TakeFromQueue();
void debugging();
void test();
void printqueue();

// Описание структуры очередь
struct QUEUE {
   int Q[M]; // массив, используемый для хранения очереди
   int F; // ИНДЕКС первого элемента очереди
   int L; // ИНДЕКС ПОСЛЕДНЕГО
   bool IsEmpty; // признак пустой очереди
};
QUEUE T;

int main() {
// задание начального состояния очереди
T.F=0;
T.L=-1;
T.IsEmpty=true;
   
// ВНИМАНИЕ!!!
// Для отладки программы используйте процедуру debugging()
// Тестирование происходит с помощью процедуры test()
debugging(); // При отправке решения на ipc закомментировать
//test();      // При отправке решения на ipc раскомментировать 
return 0;
}

bool PutInQueue(int x) {
// НАПИШИТЕ ЭТУ ФУНКЦИЮ
// поместить элемент x в очередь
// возвращает истину в случае успеха
}

//----------------------------------------------
int TakeFromQueue() {
// НАПИШИТЕ ЭТУ ФУНКЦИЮ
// Взять элемент из очереди T
// функция возвращает взятый из очереди элемент
// если очередь пуста, то возвращается INT_MAX (defined в limits.h)
}

void debugging(){ // Процедура для отладки
   int k = 0;
   do {
      system("cls");
      cout << "1. Добавить элемент в очередь\n";
      cout << "2.Взять элемент из очереди\n";
      cout << "3.Напечатать очередь\n";
      cout << "ESC. Выход\n\n";

      switch (_getch()) {
      case '1':
         cout << "Input int element\n";
         int x;
         cin >> x;
         if (!PutInQueue(x)) {
            cout << "Queue is overflow\n";
            _getch();
         }
         break;
      case '2': // Взятие очереди
         k = TakeFromQueue();
         if (k!=INT_MAX) cout << "Value = " << k << endl;
         else cout << "Queue is empty\n";
         _getch();
         break;
      case '3': // Вывод очереди на экран
         printqueue();
         _getch();
         break;
      case 27:
         return;
         break;
      default:
         continue;
      }
   } while (true);
}
void printqueue(){
   if (T.IsEmpty) {
      cout << "Queue is empty\n";
      _getch();
      return;
   }
   cout << "Start: ";
   if(T.F<T.L){
      for (int i = T.F; i != T.L+1; i++) {
         cout << T.Q[i] << " < ";
      }
   } else {
      for (int i = T.F; i != T.L; i++) {
         if (i==M) {
            i=0;
         }
         cout << T.Q[i] << " < ";
      }
      cout << T.Q[T.L] << " < ";
   }
   cout << "End\n";
}

void test(){
   int x;
   for(int i = 0; i < M+1; i++){
      cin >> x;
      if(!PutInQueue(x)) cout << "overflow" << endl;
   }
   printqueue();
   
   for(int i = 0; i < M/2; i++){
      cout << TakeFromQueue() << ", ";
   }
   cout << endl;
   for(int i = 0; i < 1+M/2; i++){
      cin >> x;
      if(!PutInQueue(x)) cout << "overflow" << endl;
   }
   printqueue();
   for(int i = 0; i < M+1; i++){
      cout << TakeFromQueue() << ", ";
   }
} 
loading