Отсортировать элементы списка (структуры) - 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);

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


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

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

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