Advertisement
VladimirKostovsky

Лаба 2. Буква А без вывода в файл

Mar 21st, 2022
102
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.42 KB | None | 0 0
  1. #include <iostream>
  2. #include <fstream>
  3. using namespace std;
  4.  
  5. /*ОБЪЯВЛЕНИЕ СТРУКТУРЫ*/
  6. struct Queue { int x; //информационный элемент
  7.     Queue *Tail, *Head, *Next; //Голова очереди и указатель на следующий элемент
  8. };
  9.  
  10. /*ФУНКЦИЯ ДОБАВЛЕНИЯ ЭЛЕМЕНТА В очередь */
  11. void Push(int x, Queue *&MyQueue){
  12. //Принимаем элемент очереди и указатель на очередь, при этом говорим, что принимаемый указатель будет сам по себе указателем
  13.    
  14.     Queue *element = new Queue; //Выделяем память для нового элемента
  15.     element->x = x; //Записываем в поле x принимаемый в функцию элемент x
  16.     element->Tail = NULL;
  17.     if (MyQueue->Head == NULL)
  18.         MyQueue->Head = MyQueue->Next = element;
  19.     else{
  20.         //Сдвигаем хвост на позицию вперед
  21.         (MyQueue->Next)->Tail = element;
  22.         MyQueue->Next = element;
  23.     }
  24. }
  25.  
  26. /*ФУНКЦИЯ ОТОБРАЖЕНИЯ очереди*/
  27. void Show(Queue *MyQueue){ //Нужна только сама очередь
  28.  
  29.     Queue *temp = MyQueue->Head; //Объявляем указатель и Указываем ему, что его позиция в голове очереди
  30.     //с помощью цикла проходим по всему стеку
  31.     while (temp != NULL){ //выходим при встрече с пустым полем
  32.         cout << temp->x << " "; //Выводим на экран элемент очереди
  33.         temp = temp->Tail; //Переходим к следующему элементу
  34.     }
  35.         cout << endl;
  36. }
  37.  
  38. /*ФУНКЦИЯ УДАЛЕНИЯ ОЧЕРЕДИ ИЗ ПАМЯТИ*/
  39. void ClearQueue(Queue *MyQueue){
  40.     while (MyQueue->Head != NULL){ //Пока по адресу не пусто
  41.    
  42.         Queue *temp = MyQueue->Head->Tail; //Временная переменная для хранения адреса следующего элемента
  43.         delete MyQueue->Head; //Освобождаем адрес обозначающий начало
  44.         MyQueue->Head = temp; //Меняем адрес на следующий
  45.     }
  46. }
  47.  
  48. /*ФУНКЦИЯ УБАВЛЕНИЯ ЭЛЕМЕНТА ИЗ очереди */
  49. void Pop(Queue *MyQueue){
  50.     if (MyQueue->Head != NULL){ //Пока по адресу не пусто
  51.         Queue *temp = MyQueue->Head->Tail; //Временная переменная для хранения адреса следующего элемента
  52.         MyQueue->Head = temp; //Меняем адрес на следующий
  53.     }
  54.    
  55. }
  56.  
  57. /*ЗАПОЛНЕНИЕ ИЗ ЦИКЛА*/
  58. void CreateQueue(Queue *MyQueue){
  59.     MyQueue->Head = NULL; //Во избежание ошибок инициализируем первый элемент
  60.     for (int i = -2; i<10; i++)
  61.         Push(i, MyQueue); //Заносим данные в очередь
  62. }
  63.  
  64. /*УДАЛЕНИЕ ЭЛЕМЕНТОВ"*/
  65. void DeleteNegative(Queue *MyQueue){
  66.     int count=0;
  67.     Queue *temp = MyQueue->Head; //Объявляем указатель и Указываем ему, что его позиция в голове очереди
  68.     //с помощью цикла проходим по всему стеку
  69.     while (temp != NULL){
  70.         temp = temp->Tail;
  71.     }
  72.     temp = MyQueue->Head;
  73.     Pop(MyQueue);
  74.  
  75. /*ДОБАВЛЕНИЕ ЭЛЕМЕНТОВ*/
  76. void AddNegative (Queue *MyQueue) {
  77.     int count=0;
  78.     Queue *temp = MyQueue->Head; //Объявляем указатель и Указываем ему, что его позиция в голове очереди
  79.     //с помощью цикла проходим по всему стеку
  80.     while (temp != NULL){
  81.         count++;
  82.         temp = temp->Tail;
  83.     }
  84.     temp = MyQueue->Head;
  85.     Push(42, MyQueue);
  86.     temp = temp->Tail;
  87. }
  88.  
  89. /*ПРОВЕРКА НА ПУСТОТУ*/
  90. void Checkman(Queue *MyQueue){
  91.     int count=0;
  92.     Queue *temp = MyQueue->Head; //Объявляем указатель и Указываем ему, что его позиция в голове очереди
  93.     //с помощью цикла проходим по всему стеку
  94.     while (temp != NULL){
  95.         count++;
  96.         temp = temp->Tail;
  97.     }
  98.     temp = MyQueue->Head;
  99.  
  100.     for (int j = 0; j < count; j++){
  101.     if (temp->x = 0) {continue;}
  102.     else {cout << "Не пуст!" << endl;break;}
  103.     }
  104. }
  105.  
  106. int main(){
  107.     Queue *MyQueue = new Queue; //Выделяем память для очереди
  108.  
  109.     CreateQueue(MyQueue); //Инициализируем очередь
  110.     cout << "Проверили на пустоту" << endl;
  111.     Checkman(MyQueue);
  112.    
  113.     cout << "Создали список" << endl;
  114.     Show(MyQueue); //Выводим очередь на экран
  115.  
  116.     DeleteNegative(MyQueue);
  117.     cout << "Удалили элемент" << endl; // вопросик: удалять по индексу, или по значению?
  118.     Show(MyQueue);
  119.  
  120.     AddNegative(MyQueue);
  121.     cout << "Добавили элемент" << endl;
  122.     Show(MyQueue);
  123.  
  124.     ClearQueue(MyQueue); //Очищаем память.
  125.     delete MyQueue->Head;
  126.     delete MyQueue;
  127.     cout << "Память очищена" << endl;
  128. }
  129.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement