Создать список из случайных целых чисел, лежащих в диапазоне - C (СИ)
Формулировка задачи:
Решение задачи: «Создать список из случайных целых чисел, лежащих в диапазоне»
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <assert.h>
struct TNode
{
int value;
struct TNode* next;
};
struct TQueue
{
struct TNode* head;
struct TNode* tail;
};
//----------------------------------------------//
struct TQueue* Push(struct TQueue* queue, int value)
{
assert(queue != NULL);
struct TNode* node = (struct TNode*) malloc(sizeof(struct TNode));
node->value = value;
node->next = NULL;
if (queue->tail)
{
queue->tail->next = node;
}
queue->tail = node;
if (queue->head == NULL)
{
queue->head = node;
}
return queue;
}
//----------------------------------------------//
int Pop(struct TQueue* queue)
{
assert(queue != NULL);
assert(queue->head != NULL);
struct TNode* node = queue->head;
queue->head = queue->head->next;
int value = node->value;
free(node);
return value;
}
//----------------------------------------------//
int IsNull(struct TQueue queue)
{
return (queue.head == NULL);
}
//----------------------------------------------//
void Clear(struct TQueue* queue)
{
for (; !IsNull(*queue); Pop(queue));
queue->tail = NULL;
}
//----------------------------------------------//
void Print(struct TQueue queue)
{
for (; queue.head; queue.head = queue.head->next)
{
printf("%d ", queue.head->value);
}
printf("\n");
}
//----------------------------------------------//
int main(int argc, const char* argv[])
{
srand(time(NULL));
struct TQueue queue = {NULL, NULL};
size_t i;
for (i = 0; i < 20; ++i)
{
Push(&queue, rand()%100 - 50);
}
printf("base list: "); Print(queue);
struct TQueue q1 = {NULL, NULL};
struct TQueue q2 = {NULL, NULL};
while (!IsNull(queue))
{
int value = Pop(&queue);
if (value > 0)
{
Push(&q1, value);
}
else
{
Push(&q2, value);
}
}
printf("q1: "); Print(q1);
printf("q2: "); Print(q2);
system("pause");
return 0;
}
Объяснение кода листинга программы
В этом коде используется структура данных очередь (queue), реализованная с помощью связанных списков (linked lists).
Список содержит 20 случайных целых чисел, сгенерированных в диапазоне от -50 до 50.
Код также содержит две другие структуры данных, q1 и q2, которые также являются очередями.
В основной части программы код сначала заполняет исходную очередь случайными числами. Затем код извлекает элементы из исходной очереди и добавляет их в q1 и q2 в зависимости от знака числа.
После того, как исходная очередь пуста, код выводит содержимое q1 и q2.
Код также включает функцию IsNull, которая проверяет, является ли очередь пустой, и функцию Clear, которая очищает очередь.
Код использует функцию rand из стандартной библиотеки C для генерации случайных чисел.