Отсортировать структуры по цене и удалить машины с 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 монитором»
#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 монитором. Возможно, эти операции должны были быть реализованы, но код, который их выполняет, отсутствует.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д