"Kasowanie dowolnego elementu" tablicy struktur oraz listy jednokierunkowej (czysty C)

0

Mam sobie taką strukturkę:

struct spizarka{
    char nazwa_produktu[30];
    char jednostka[30];
    float liczba_jednostek;
};
typedef struct spizarka produkt;

Mam rownież tablicę tej strukturki (wypełnioną).

produkt tab[200]

1) W jaki sposób usunąć np.: 120 element tablicy? Myślę, że to trzeba po prostu przerzucić, że 141 staje się 140, 142 staje sie 141 i tak dalej, ale mi nie wychodzi. Ktos cos pomoze?
Druga sprawa dotyczy w sumie tego samego problemu, ale na liscie jednokierunkowej.
Mam sobie taką listę:

struct lista{
    produkt x;
    struct lista *next;
};
typedef struct lista element;
typedef element *ADRES;

Na tej liscie pod roznymi adresami kryja sie rozne dane i w jaki sposób np.: wyrzucić 45 element listy, pewnie też tzreba, że 46 staje sie 45, 47 staje sie 46 i tak dalej, ale jak wyczyscic te dane pod tym adresem? Bo wiadomo, że to sa dane typu struktura spizarka ;p

1
Blue_Carpet napisał(a):

1) W jaki sposób usunąć np.: 120 element tablicy? Myślę, że to trzeba po prostu przerzucić, że 141 staje się 140, 142 staje sie 141 i tak dalej, ale mi nie wychodzi. Ktos cos pomoze?
Nic dziwnego, bo 121 staje się 120, 122 staje się 121 itd. Prościej oczywiście ostatni wstawić na miejsce usuwanego, zamiast wszystko przesuwać, ale jeżeli już to wystarczy jeden memcpy().

Blue_Carpet napisał(a):

Na tej liscie pod roznymi adresami kryja sie rozne dane i w jaki sposób np.: wyrzucić 45 element listy, pewnie też tzreba, że 46 staje sie 45, 47 staje sie 46 i tak dalej, ale jak wyczyscic te dane pod tym adresem? Bo wiadomo, że to sa dane typu struktura spizarka ;p
Można tak ale trochę bez sensu, znajdujesz element poprzedni dla usuwanego jeżeli poprzedniego brak to zmieniasz początek listy, jeżeli jest to podmieniasz jego next. Czyścisz pamięć poprzez free()

1 użytkowników online, w tym zalogowanych: 0, gości: 1