Отсортировать элементы списка (структуры) - C (СИ)
Формулировка задачи:
Привет всем. Подскажите, как можно сортануть элементы списка. Есть список книг и нужно упорядочить их по количеству страниц. Вот пример:
#include <stdio.h> #include <cs50.h> int main (void) { typedef struct list { char *name; int pages; struct list *next; } list; list *book1, *book2,*book3; book1 = book2 = book3 = NULL; book1 = malloc(sizeof(list)); book1->pages = 200; book1->next = NULL; book2 = malloc(sizeof(list)); book2->pages = 150; book2->next = NULL; book3 = malloc(sizeof(list)); book3->pages = 300; book3->next = NULL; book1->next = book2; book2->next = book3; book3->next = NULL; list *ptr1; ptr1 = book1; list *ptr2; ptr2 = book1; while(ptr1!=NULL) { while(ptr2!=NULL) { if(ptr2->next->pages < ptr2->pages) { list *minbook; minbook=ptr2->next; ptr2->next=ptr2; ptr2=minbook; } ptr2=ptr2->next; } ptr1=ptr1->next; } ptr1=ptr2; while(ptr1!=0) { printf("%d\n",ptr1->pages); } }
Решение задачи: «Отсортировать элементы списка (структуры)»
textual
Листинг программы
int n = 3; list *books = malloc(sizeof(list)*n); books[0] = *book1; books[1] = *book2; books[2] = *book3; for (int i = 0; i < n; i++) printf("%d\n", books[i].pages); puts("\n\n"); for (int i = 0; i<n-1; i++) for (int j = 0; j<n-1; j++) if (books[j+1].pages < books[j].pages) { temp = books[j+1]; books[j+1] = books[j]; books[j] = temp; } for (int i = 0; i < n; i++) printf("%d\n", books[i].pages);
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д