Вдвойне списки в C - PullRequest
       5

Вдвойне списки в C

2 голосов
/ 31 марта 2019

Я хочу найти 5 самых дешевых товаров из всех магазинов с O(n+m) (n = длина узла каждого магазина, m = доступные продукты). Я понял алгоритм в своей голове, но не могу перевести на C. Я опубликую файл заголовка с struct s. Вот что я хочу сделать:

Для каждого магазина сортируйте свои продукты по их цене, а затем создайте другой список продуктов с 5 самыми дешевыми продуктами каждого магазина, а затем sort() со всеми из них и напечатайте первые 5.

struct Shop {
    int sid;
    int type;
    struct Product *products;
    struct Shop *next;
    struct Shop *prev;
};

struct Product {
    int pid;
    int quantity;
    int price;
    struct Product *next;
};
/* Global, pointer to the header node of the circular, double-linked list of shops */
struct Shop *H;

/* Global, array of pointers for the use in event 'Find Cheapest Products' */
struct Product *CheapestProducts[5];

РЕДАКТИРОВАТЬ: он просто добавляет продукты в newProd (например, список TMP) и печатает продукты, количество и цену для каждого магазина. отсортировано по цене.

 struct Shop *shop=H;
    struct Product *prod;
    struct Product *newProd;
    int count=0;;
    if(shop==NULL) return 0;
    while(shop->next!=NULL)
    {
            prod=shop->products;
            //newProd=prod;
            sortPrice(prod);
            while(prod!=NULL)
            {
                    newProd=prod;
                     printf("<%d:%d:%d>\t" ,newProd->pid,newProd->quantity,newProd->price);

                    //newProd=prod;
                    newProd=newProd->next;
                    prod=prod->next;
                    //sortPrice(newProd);
                    //sortPrice(newProd);
                    // printf("<%d:%d:%d>\t" ,newProd->pid,newProd->quantity,newProd->price);

            }
            printf("\n");
            //printf("<%d:%d:%d>\t" ,newProd->pid,newProd->quantity,newProd->price);
            shop=shop->next;
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...