Отсортировать структуры по цене и удалить машины с EGA монитором - C (СИ)

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

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

Есть задача на двунаправленный линейный список. Структуры выглядят следующим образом:
#define KONF struct konfigur //описание структуры "конфигурация" в структуре "ЭВМ"
KONF
{ char type [50];
  int operat, disk;  //peremennie strukturi
  char monik [50];     //monitor
};
 
#define EVM struct komputer     //struktura peremennoi kompiytera EVM
EVM
{ char marka [50];
  int price;
  char proizv [50];
  KONF konfig;
};
#define KOMP struct komp      //struktura polia EVM
KOMP
{ EVM info;
  KOMP *llink, *rlink;  //pole sleva i pole sprava
};
Задача следующая: создать двунаправленный линейный список. в котором отсортировать структуры по цене (не важно в каком направлении) и удалить машины с EGA монитором. ВВод и вывод я сделала, а вот с созданием списка по заданию - сложности. Помоги плиз.

Решение задачи: «Отсортировать структуры по цене и удалить машины с EGA монитором»

textual
Листинг программы
#include "stdio.h"
#include "stdlib.h"
 
typedef struct NODE
{
        int a;
        struct NODE *next;
        struct NODE *prev;
}Node;
 
typedef struct LIST
{
        Node *head;
        Node *last;
        int l;
}List;
 
List * CreateList()
{
     List* res=(List *)malloc(sizeof(List));
     res->head=res->last=NULL;
     res->l=0;
}
 
Node * CreateNode(int a)
{
     Node *res=(Node *)malloc(sizeof(Node));
     res->a=a;
     res->next=NULL;
     res->prev=NULL;
}
 
void AddNode(List *student_list, int a)
{
    Node* node = CreateNode(a);
    if(student_list->head == NULL)
    {
        node->next=NULL;
        node->prev=NULL;
        student_list->head = node;
    }
    else
    {
        node->next=NULL;
        node->prev=student_list->last;
        student_list->last->next = node;
    }
    student_list->last = node;
    student_list->l++;
}
 
int DeleteNode(List* a_list, int num)
{
    if((num > a_list->l)||(num <= 0))
    {
        printf("Wrong number.\n");
        return 0;
    }
    Node *iter=NULL,*temp=NULL;
    if(a_list->l == 0)
    {
        printf("List is empty - nothing to delete.\n");
        return 0;
    }
 
    iter = a_list->head;
    num--;
    while(num != 0)
    {
        iter = iter->next;
        num--;
    }
 
 
    if(a_list->l == 1)
    {
        free(iter);
        a_list->head = a_list->last = NULL;
    }
    else if(iter == a_list->head)
    {
        a_list->head = a_list->head->next;
        a_list->head->prev = NULL;
        free(iter);
    }
    else if(iter == a_list->last)
    {
        a_list->last = a_list->last->prev;
        a_list->last->next = NULL;
        free(iter);
    }
    else
    {
        iter->prev->next=iter->next;
        iter->next->prev=iter->prev;
        free(iter);
    }
    
    a_list->l --;
    return 1;
}
 
void PrintList(List* a_list)
{
    Node *iter = NULL;
    int num=0;
    if(a_list->l == 0)
    {
        printf("List is empty\n");
    }
    else
    {
        printf("<br>\n");
        iter = a_list->head;
        while(iter != NULL)
        {
            num++;
            printf("%d)%d\n",num,iter->a);
            iter = iter->next;
        }
        printf("<br>\n");
    }
}
 
int main()
{
    List *list=CreateList();
    //Добавляем че хотим в list и удаляем че хотим из list (подаем номер элемента на удаление)
}

Объяснение кода листинга программы

Код представляет собой реализацию односвязного списка в языке C. Список содержит структуры, которые включают в себя целочисленное значение a и указатели на следующий и предыдущий элементы. В функции CreateList создается новый список, его голова и хвост указывают на NULL. Функция CreateNode создает новый узел со значением a и указывает его указатели на NULL. Функция AddNode добавляет новый узел в список. Если список пуст, новый узел становится головой и хвостом списка. В противном случае новый узел добавляется в конец списка. Функция DeleteNode удаляет указанный узел из списка. Если список пуст или указанный номер больше размера списка или меньше 1, выводится сообщение об ошибке. В противном случае указанный узел удаляется из списка, а его соседи переустанавливаются, чтобы избежать дыр в списке. Функция PrintList выводит содержимое списка. Если список пуст, выводится сообщение об ошибке. В противном случае выводится список в формате номер элемента)значение элемента. В функции main создается новый список, в который добавляются и удаляются элементы по желанию. Код не содержит прямого указания на сортировку структур по цене или удаление машин с EGA монитором. Возможно, эти операции должны были быть реализованы, но код, который их выполняет, отсутствует.

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


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

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

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