Реализовать все возможные операции для очереди - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Доброго времени суток) кому не составит большого труда, прошу помочь с заданием) Реализовать все возможные операции

для очереди:

реализация очереди с помощью массива, реализация очереди с помощью списка, добавление элемента в конец очереди, поиск элемента в очереди, удаление элемента из очереди. Задание большое конечно, буду рад любой помощи с Вашей стороны) (язык желательно Си (не Си++))

Решение задачи: «Реализовать все возможные операции для очереди»

textual
Листинг программы
  1. #include <conio.h>
  2. #include <stdio.h>
  3.  
  4. struct list
  5. {
  6.     int el;
  7.     list *next;
  8. };
  9.  
  10. struct queue
  11. {
  12.     list *beg, *end;
  13. };
  14.  
  15. void putToQueue(queue *q, int iEl)   //добавить в очередь
  16. {
  17.     list *tmp;
  18.     tmp = new list;
  19.     tmp->next = NULL;
  20.     tmp->el = iEl;
  21.     if(q->end != NULL)
  22.         q->end->next = tmp;
  23.     else
  24.         q->beg = tmp;
  25.     q->end = tmp;
  26. }
  27.  
  28. int takeFromQueue(queue *q, int *iEl) // взять из очереди
  29. {
  30.     if(q->beg == NULL) return 0;
  31.     list *tmp;
  32.     tmp = q->beg;
  33.     *iEl = tmp->el;
  34.     q->beg = tmp->next;
  35.     delete tmp;
  36.     if(q->beg == NULL) q->end = NULL;
  37.     return 1;
  38. }
  39.  
  40. queue *CreateQueue()            //создать очередь
  41. {
  42.     queue *q;
  43.     q = new queue;
  44.     q->beg = NULL;
  45.     q->end = NULL;
  46.     return q;
  47. }
  48.  
  49. int isQueueEmpty(queue *q)      //проверка очереди на пустоту
  50. {
  51.     if(q->beg == NULL) return 1;
  52.     return 0;
  53. }
  54.  
  55. int ClearQueue(queue *q)        //очистка очереди
  56. {
  57.     if(q->beg == NULL) return 0;
  58.     list *tmp, *t;
  59.     tmp = q->beg;
  60.     while(tmp->next != NULL)
  61.     {
  62.         t = tmp;
  63.         tmp = t->next;
  64.         delete t;
  65.     }
  66.     q->beg = NULL;
  67.     q->end = NULL;
  68.     return 1;
  69. }
  70.  
  71. void PrintQueue(queue *q)       //вывестии очередь на экран
  72. {
  73.     printf("\n");
  74.     queue *tmp = CreateQueue();
  75.     int iEl;
  76.     while(!isQueueEmpty(q))
  77.     {
  78.         takeFromQueue(q, &iEl);
  79.         printf("%d ", iEl);
  80.         putToQueue(tmp, iEl);
  81.     }
  82.     while(!isQueueEmpty(tmp))
  83.     {
  84.         takeFromQueue(tmp, &iEl);
  85.         putToQueue(q, iEl);
  86.     }
  87. }
  88. void main()
  89. {
  90.     int i;
  91.     queue *q = CreateQueue();
  92.     printf(".......Put Elems..............");
  93.     for(i=30; i<40; i++)
  94.     {
  95.         putToQueue(q, i);
  96.         PrintQueue(q);
  97.     }
  98.     printf("\n......Take Elems...............");
  99.     while(!isQueueEmpty(q))
  100.     {
  101.         takeFromQueue(q, &i);
  102.         PrintQueue(q);
  103.     }
  104.     printf("\n........Put Elems.............");
  105.     for(i=30; i<35; i++)
  106.     {
  107.         putToQueue(q, i);
  108.         PrintQueue(q);
  109.     }
  110.     printf("\n........Clear queue.............");
  111.     ClearQueue(q);
  112.     PrintQueue(q);
  113.  
  114.     _getch();
  115. }

Объяснение кода листинга программы

  1. Структура списка:
    • struct list
      • int el;
      • list *next;
    • используется для представления элемента в очереди
  2. Структура очереди:
    • struct queue
      • list *beg;
      • list *end;
    • используется для хранения элементов очереди
  3. Функция putToQueue:
    • добавляет новый элемент в конец очереди
    • создает новый экземпляр списка
    • инициализирует его значением и ссылку на следующий элемент (если это не первый элемент)
    • добавляет новый экземпляр списка в конец очереди
  4. Функция takeFromQueue:
    • удаляет и возвращает первый элемент из очереди
    • если очередь пуста, возвращает 0
    • сохраняет значение удаленного элемента в переменной iEl
    • удаляет ссылку на удаленный элемент в очереди
  5. Функция CreateQueue:
    • создает новый экземпляр структуры queue
    • инициализирует его булевым значением, указывающим на пустоту очереди
  6. Функция isQueueEmpty:
    • проверяет, пуста ли очередь
    • возвращает 1, если очередь пуста, и 0 в противном случае
  7. Функция ClearQueue:
    • очищает очередь
    • проходит по всем элементам очереди, начиная с первого
    • удаляет каждый элемент и сохраняет его значение в переменной iEl
    • удаляет все элементы из очереди
  8. Функция PrintQueue:
    • выводит все элементы очереди на экран
    • создает новый экземпляр структуры queue для временного хранения элементов
    • проходит по всем элементам очереди
    • удаляет каждый элемент и добавляет его в временную очередь
    • выводит значение каждого элемента на экран
    • добавляет каждый элемент обратно в очередь
  9. Функция main:
    • содержит основной код программы
    • создает новый экземпляр структуры queue
    • добавляет элементы в очередь и выводит ее на экран
    • удаляет элементы из очереди и выводит ее на экран
    • добавляет элементы в очередь и выводит ее на экран
    • очищает очередь и выводит ее на экран
    • завершает программу
  10. Код программы написан на языке C
    • использует библиотеки и
    • объявлены функции: putToQueue, takeFromQueue, CreateQueue, isQueueEmpty, ClearQueue, PrintQueue, main

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

6   голосов , оценка 3.833 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы