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