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

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

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

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

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

textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
 
typedef struct node_t
{
   int value;
   struct node_t* next;
}  TNode;
 
typedef struct queue_t
{
   TNode* head;
   TNode* tail;
}  TQueue;
 
//-----------------------------------------------------------------------------
TQueue* Push(TQueue* queue, int value)
{
   TNode* node = (TNode*) malloc(sizeof(TNode));
   node->value = value;
   node->next = NULL;
 
   if (queue->head && queue->tail)
   {
      queue->tail->next = node;
      queue->tail = node;
   }
   else
   {
      queue->head = queue->tail = node;
   }
 
   return queue;
}
//-----------------------------------------------------------------------------
int Pop(TQueue* queue)
{
   int value = 0;
 
   if (queue->head)
   {
      value = queue->head->value;
      queue->head = queue->head->next;
   }
 
   return value;
}
//-----------------------------------------------------------------------------
TNode* Find(TQueue* queue, int value)
{
   TNode* node = queue->head;
 
   for (; node && (node->value != value); node = node->next) { ; }
 
   return node;
}
//-----------------------------------------------------------------------------
void Print(const TQueue* queue)
{
   const TNode* node = queue->head;
 
   for (; node; node = node->next)
   {
      printf("%d ", node->value);
   }
   printf("\n");
}
//-----------------------------------------------------------------------------
 
int main()
{
   TQueue queue = {NULL, NULL};
   int value = 0;
 
   printf("elements: ");
   while (scanf("%d", &value))
   {
      Push(&queue, value);
   }
 
   printf("result: "); Print(&queue);
 
   printf("popped: %d\n", Pop(&queue));
   printf("popped: %d\n", Pop(&queue));
   printf("popped: %d\n", Pop(&queue));
 
   printf("result: "); Print(&queue);
 
   printf("find: ");
   fflush(stdin);
   scanf("%d", &value);
 
   TNode* find = Find(&queue, value);
 
   if (find)
   {
      printf("found: %d\n", find->value);
   }
   else
   {
      printf("%d not found\n", value);
   }
 
   system("pause");
 
   return 0;
}

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

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

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

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


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

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

8   голосов , оценка 4.125 из 5
Похожие ответы