Я хочу найти 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;
}