Очередь на базе списка: добавление элемента, удаление, поиск в очереди, вывод на экран - 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
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д