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