Очередь на базе списка: добавление элемента, удаление, поиск в очереди, вывод на экран - 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).
- В функции Push() создается новый узел с заданным значением и добавляется в конец очереди. Если очередь пуста, то устанавливаются значения head и tail.
- В функции Pop() извлекается и возвращается значение первого элемента в очереди. Если очередь пуста, то возвращается 0.
- В функции Find() ищется узел с заданным значением в очереди. Если узел найден, то его значение возвращается, иначе возвращается NULL.
- В функции Print() выводятся все значения в очереди в консоль.
- В функции main() создается экземпляр очереди. Пользователю предлагается ввести несколько чисел, которые затем добавляются в очередь. Затем выводятся все значения в очереди. После этого пользователю предлагается ввести число для поиска в очереди. Если число найдено, то выводится сообщение
found
, иначеnot found
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д