Advertisement
VladimirKostovsky

Лаба 2. Изначальная задумка

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