Создать список А содержащий вещественные числа. Разбить список А на 2 списка - C (СИ)

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

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

создать список А содержащий вещественные числа. разбить список А на 2 списка - отрицательных и положительных чисел. в списке, состоящем из отрицательных чисел найти минимальный элемент

Решение задачи: «Создать список А содержащий вещественные числа. Разбить список А на 2 списка»

textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <assert.h>
 
typedef struct node_t
{
   float value;
   struct node_t* next;
}  TNode;
 
typedef struct list_t
{
   TNode* head;
   TNode* tail;
}  TList;
 
//-----------------------------------------------------------------------------
TList* Push(TList* list, float value)
{
   assert(list);
 
   TNode* node = (TNode*) malloc(sizeof(TNode));
   node->value = value;
   node->next = NULL;
 
   if (list->head && list->tail)
   {
      list->tail->next = node;
      list->tail = node;
   }
   else
   {
      list->head = list->tail = node;
   }
 
   return list;
}
//-----------------------------------------------------------------------------
void Split(TList* source, TList* positive, TList* negative)
{
   assert(source);
   assert(positive);
   assert(negative);
 
   positive->head = positive->tail = NULL;
   negative->head = negative->tail = NULL;
 
   TList* plist = NULL;
 
   TNode* node;
 
   while (source->head)
   {
      node = source->head;
      source->head = source->head->next;
      node->next = NULL;
 
      plist = (node->value < 0.0) ? negative : positive;
 
      if (plist->head && plist->tail)
      {
         plist->tail->next = node;
         plist->tail = node;
      }
      else
      {
         plist->head = plist->tail = node;
      }
   }
 
   source->tail = NULL;
}
//-----------------------------------------------------------------------------
TNode* GetMin(TList* list)
{
   assert(list);
 
   TNode* min = list->head;
 
   if (list->head)
   {
      TNode* node = list->head->next;
 
      for (; node; node = node->next)
      {
         if (node->value < min->value)
         {
            min = node;
         }
      }
   }
 
   return min;
}
//-----------------------------------------------------------------------------
TList GetRandomList(int count)
{
   TList list = {NULL, NULL};
   float value;
 
   while (count-- > 0)
   {
      value = rand() % 100 - 50;
      Push(&list, value + (float)(rand() % 100) * 0.01);
   }
 
   return list;
}
//-----------------------------------------------------------------------------
void Print(const TList* list)
{
   assert(list);
 
   const TNode* node = list->head;
 
   for (; node; node = node->next)
   {
      printf("%.2f, ", node->value);
   }
   printf("\b\b \n");
}
//-----------------------------------------------------------------------------
 
int main()
{
   srand(time(NULL));
 
   TList list = GetRandomList(10);
 
 
   printf("source: ");
   Print(&list);
 
   TList positive;
   TList negative;
   Split(&list, &positive, &negative);
 
   TNode* min;
   printf("positive: ");
   Print(&positive);
   if ((min = GetMin(&positive)) != NULL)
   {
      printf("min: %.2f\n", min->value);
   }
 
   printf("negative: ");
   Print(&negative);
   if ((min = GetMin(&negative)) != NULL)
   {
      printf("min: %.2f\n", min->value);
   }
 
   return 0;
}

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


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

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

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