Orientace ve struktuře pomocí indexu od uživatele rubrika: Programování: C/C++
Ahoj,
mám následující strukturu
typedef struct den { int *cisla; } DEN; DEN *dny; dny = (DEN)malloc( pocetdnu * sizeof(DEN));
K tomu následně pomocí funkce alokuji v základu 2 pozice pro každý den. Poté to vypadá např.
dny[0].cisla[0]; dny[0].cisla[1];
Jde o to, že uživatel může zadávat čísla dokud se mu zachce, vždy ve tvaru cisloDne a jakékoli číslo, která si já potřebuji přiřadit k tomu dni. Např. zadá 1 5 takže potřebuji uložit dny[1].cisla[k] = 5;. Může zadávat např pro den 1 5x hodnotu, poté pro den 2 1x hodnotu a znova hodnoty pro den 1. Tady nastává ten problém, jak si evidovat jednotlivé k, na jakou pozici musí být přiřazeno k, aby nebyl přepsán žádný znak před a ani aby nebylo žádné volné místo. K potřebuji zárověň kontrolovat, abych měl místo a mohl případně použít realoc. Díky za nasměrování, jak na to.
Jedná se o jazyk C.
Jestli dobre chapu popsany problem, tak bych to resil nejak takhle:
typedef struct day_number { size_t index; int value; }; typedef struct day { day_number* numbers; size_t numbers_size; }; day* create_days(size_t count) { day* days = malloc(count * sizeof(day)); for (size_t i = 0; i < count; ++i) { days[i] = {0, 0}; } return days; } day_number* find_day_number(day* day, const size_t number_index) { for (size_t i = 0; i < day->numbers_size; ++i) { if (number_index == day->numbers[i].index) { return day->numbers + i; } } return 0; } void set_day_number(day* day, const size_t number_index, const int number_value) { day_number* number = find_day_number(day, number_index); if (!number) { day->numbers = realloc(day->numbers, ++day->numbers_size * sizeof(day_number)); number = day->numbers + day->numbers_size - 1; } number->index = number_index; number->value = number_value; }
Je to spis pro ilustraci, psal jsem to na telefonu, takze to nemam otestovane a navic je to dost naivni implementace, lepsi by bylo pouzit hash mapu kvuli rychlosti vyhledavani, ale implementaci hash mapy sem psat nebudu :)
Pro plný přístup na Devel.cz se prosím přihlaste:
Nebo se přihlaste jménem a heslem:
Komentáře