Advertisement
VladimirKostovsky

Лаба 2. Боже, храни царя

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