VladimirKostovsky

Лаба 2. Черновик за день до сдачи.

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