Очередь на базе списка: добавление элемента, удаление, поиск в очереди, вывод на экран - C (СИ)

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

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

Может у кого есть готовое решение этого задания, буду Вам очень признателен. Желательно что бы пользователь сам вводил значения с клавиатуры. ЗЫ: с Праздником всех)

Решение задачи: «Очередь на базе списка: добавление элемента, удаление, поиск в очереди, вывод на экран»

textual
Листинг программы
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. typedef struct node_t
  5. {
  6.    int value;
  7.    struct node_t* next;
  8. }  TNode;
  9.  
  10. typedef struct queue_t
  11. {
  12.    TNode* head;
  13.    TNode* tail;
  14. }  TQueue;
  15.  
  16. //-----------------------------------------------------------------------------
  17. TQueue* Push(TQueue* queue, int value)
  18. {
  19.    TNode* node = (TNode*) malloc(sizeof(TNode));
  20.    node->value = value;
  21.    node->next = NULL;
  22.  
  23.    if (queue->head && queue->tail)
  24.    {
  25.       queue->tail->next = node;
  26.       queue->tail = node;
  27.    }
  28.    else
  29.    {
  30.       queue->head = queue->tail = node;
  31.    }
  32.  
  33.    return queue;
  34. }
  35. //-----------------------------------------------------------------------------
  36. int Pop(TQueue* queue)
  37. {
  38.    int value = 0;
  39.  
  40.    if (queue->head)
  41.    {
  42.       value = queue->head->value;
  43.       queue->head = queue->head->next;
  44.    }
  45.  
  46.    return value;
  47. }
  48. //-----------------------------------------------------------------------------
  49. TNode* Find(TQueue* queue, int value)
  50. {
  51.    TNode* node = queue->head;
  52.  
  53.    for (; node && (node->value != value); node = node->next) { ; }
  54.  
  55.    return node;
  56. }
  57. //-----------------------------------------------------------------------------
  58. void Print(const TQueue* queue)
  59. {
  60.    const TNode* node = queue->head;
  61.  
  62.    for (; node; node = node->next)
  63.    {
  64.       printf("%d ", node->value);
  65.    }
  66.    printf("\n");
  67. }
  68. //-----------------------------------------------------------------------------
  69.  
  70. int main()
  71. {
  72.    TQueue queue = {NULL, NULL};
  73.    int value = 0;
  74.  
  75.    printf("elements: ");
  76.    while (scanf("%d", &value))
  77.    {
  78.       Push(&queue, value);
  79.    }
  80.  
  81.    printf("result: "); Print(&queue);
  82.  
  83.    printf("popped: %d\n", Pop(&queue));
  84.    printf("popped: %d\n", Pop(&queue));
  85.    printf("popped: %d\n", Pop(&queue));
  86.  
  87.    printf("result: "); Print(&queue);
  88.  
  89.    printf("find: ");
  90.    fflush(stdin);
  91.    scanf("%d", &value);
  92.  
  93.    TNode* find = Find(&queue, value);
  94.  
  95.    if (find)
  96.    {
  97.       printf("found: %d\n", find->value);
  98.    }
  99.    else
  100.    {
  101.       printf("%d not found\n", value);
  102.    }
  103.  
  104.    system("pause");
  105.  
  106.    return 0;
  107. }

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

Код реализует очередь на базе списка, используя структуру данных узел (TNode) и структуру очередь (TQueue).

  1. В функции Push() создается новый узел с заданным значением и добавляется в конец очереди. Если очередь пуста, то устанавливаются значения head и tail.
  2. В функции Pop() извлекается и возвращается значение первого элемента в очереди. Если очередь пуста, то возвращается 0.
  3. В функции Find() ищется узел с заданным значением в очереди. Если узел найден, то его значение возвращается, иначе возвращается NULL.
  4. В функции Print() выводятся все значения в очереди в консоль.
  5. В функции main() создается экземпляр очереди. Пользователю предлагается ввести несколько чисел, которые затем добавляются в очередь. Затем выводятся все значения в очереди. После этого пользователю предлагается ввести число для поиска в очереди. Если число найдено, то выводится сообщение found, иначе not found.

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


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

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

8   голосов , оценка 4.125 из 5

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

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

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