Создать список из случайных целых чисел, лежащих в диапазоне - C (СИ)

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

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

Добрый день! Необходимо написать программу по созданию, просмотру, добавлению и решению поставленной задачи для однонаправленного линейного списка (стек и/или очередь): Создать список из случайных целых чисел, лежащих в диапазоне от –50 до +50 и преобразовать его в два списка. Первый должен содержать только положительные числа, а второй – только отрицательные. Порядок следования чисел должен быть сохранен. Заранее благодарю за помощь.

Решение задачи: «Создать список из случайных целых чисел, лежащих в диапазоне»

textual
Листинг программы
#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 для генерации случайных чисел.

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


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

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

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