Advertisement
VladimirKostovsky

Лаба 2. Калька на вывод

Mar 21st, 2022
103
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.50 KB | None | 0 0
  1. #include <iostream>
  2. #include <fstream>
  3. #include <string>
  4. using namespace std;
  5.  
  6.  ifstream F;
  7.  ifstream F2;
  8.  
  9. /*ОБЪЯВЛЕНИЕ СТРУКТУРЫ*/
  10. struct Queue { int x; //информационный элемент
  11.     Queue *Tail, *Head, *Next; //Голова очереди и указатель на следующий элемент
  12. };
  13.  
  14. /*ФУНКЦИЯ ДОБАВЛЕНИЯ ЭЛЕМЕНТА В очередь */
  15. void Push(int x, Queue *&MyQueue){
  16. //Принимаем элемент очереди и указатель на очередь, при этом говорим, что принимаемый указатель будет сам по себе указателем
  17.  
  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.     F.open("input.txt");
  65.     Queue *element = new Queue;
  66.     while (!fin.eof())
  67.     {
  68.         fin >> element;
  69.         push(element, myQueue); // заглавное звено
  70.     }
  71.     //ifstream fin("input.txt", ios_base::app);//Выделяем память для нового элемента
  72.  
  73.  
  74. /*УДАЛЕНИЕ ЭЛЕМЕНТОВ"*/
  75. void DeleteNegative(Queue *MyQueue){
  76.     int count=0;
  77.     Queue *temp = MyQueue->Head; //Объявляем указатель и Указываем ему, что его позиция в голове очереди
  78.     //с помощью цикла проходим по всему стеку
  79.     while (temp != NULL){
  80.         temp = temp->Tail;
  81.     }
  82.     temp = MyQueue->Head;
  83.     Pop(MyQueue);
  84. }
  85.  
  86. /*ДОБАВЛЕНИЕ ЭЛЕМЕНТОВ*/
  87. void AddNegative (Queue *MyQueue) {
  88.     int count=0;
  89.     Queue *temp = MyQueue->Head; //Объявляем указатель и Указываем ему, что его позиция в голове очереди
  90.     //с помощью цикла проходим по всему стеку
  91.     while (temp != NULL){
  92.         count++;
  93.         temp = temp->Tail;
  94.     }
  95.     temp = MyQueue->Head;
  96.     Push(42, MyQueue);
  97.     temp = temp->Tail;
  98. }
  99.  
  100. /*ПРОВЕРКА НА ПУСТОТУ*/
  101. void Checkman(Queue *MyQueue){
  102.     int count=0;
  103.     Queue *temp = MyQueue->Head; //Объявляем указатель и Указываем ему, что его позиция в голове очереди
  104.     //с помощью цикла проходим по всему стеку
  105.     while (temp != NULL){
  106.         count++;
  107.         temp = temp->Tail;
  108.     }
  109.     temp = MyQueue->Head;
  110.  
  111.     for (int j = 0; j < count; j++){
  112.     if (temp->x = 0) {continue;}
  113.     else {cout << "Не пуст!" << endl;break;}
  114.     }
  115. }
  116.  
  117. int main(){
  118.     Queue *MyQueue = new Queue; //Выделяем память для очереди
  119.  
  120.     CreateQueue(MyQueue); //Инициализируем очередь
  121.     cout << "Проверили на пустоту" << endl;
  122.     Checkman(MyQueue);
  123.  
  124.     cout << "Создали список" << endl;
  125.     Show(MyQueue); //Выводим очередь на экран
  126.  
  127.     DeleteNegative(MyQueue);
  128.     cout << "Удалили элемент" << endl; // вопросик: удалять по индексу, или по значению?
  129.     Show(MyQueue);
  130.  
  131.     AddNegative(MyQueue);
  132.     cout << "Добавили элемент" << endl;
  133.     Show(MyQueue);
  134.  
  135.     ClearQueue(MyQueue); //Очищаем память.
  136.     delete MyQueue->Head;
  137.     delete MyQueue;
  138.     cout << "Память очищена" << endl;
  139. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement