Pridanie noveho zaznamu do spajaneho zoznamu – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Pridanie noveho zaznamu do spajaneho zoznamu – C / C++ – Fórum – Programujte.comPridanie noveho zaznamu do spajaneho zoznamu – C / C++ – Fórum – Programujte.com

 

peter99
~ Anonymní uživatel
1 příspěvek
5. 12. 2009   #1
-
0
-

Zdravim,

mam opat velky problem so spajanym dynamickym zoznamom.

Mam takyto kod:

typedef struct prvek {
int hodnota;
struct prvek *p_dalsi;
} PRVEK;

PRVEK *alokuj_a_testuj(void)
{
PRVEK *p_pom;

p_pom = (PRVEK *) malloc(sizeof(PRVEK));
if (p_pom == NULL) {
printf("Malo pameti\n");
exit(1);
}
return p_pom;
}


int main(void)
{
int i, n, k;
PRVEK *p_prv, *p_akt, *p_pred;

n = 10;

/* vytvoreni prvniho prvku */
p_prv = alokuj_a_testuj();
p_prv->hodnota = 1;
p_prv->p_dalsi = NULL;
p_akt = p_prv;

/* vytvoreni vsech dalsich prvku */
for (i = 2; i <= n; i++) {
p_akt->p_dalsi = alokuj_a_testuj();
p_akt = p_akt->p_dalsi;
p_akt->hodnota = i;
p_akt->p_dalsi = NULL;
}


for (p_akt = p_prv; p_akt != NULL; p_akt = p_akt->p_dalsi) {
printf("%2d [%p]\n", p_akt->hodnota, p_akt);
}

/* zaverecne uvolneni pameti */
for (p_akt = p_prv; p_akt != NULL; ) {
p_prv = p_akt;
p_akt = p_akt->p_dalsi;
free((void *) p_prv);
}
return 0;
}





Vsetko mi jasne, len teraz mi ide o to, ze by som chcel pridat novy zaznam. Nakoniec zoznamu by som to vedel pridat, ale ja to chcem pridat napr. na poziciu 3 a ostane by sa posunulo doprava. Vobec mi to nechce spravne ist, uz som s tym stravil cely vecer.

Teda chcem aby napr mi potom vzniklo:

1,2,3, NoveCislo, 4, 5, 6, 7, 8, 9, 10

Chapete o co mi ide?
Treba tam aj niekde mallocnut jedno miesto.

Prosim, ak viete, poradte mi.

Dakujem velmi pekne.

Nahlásit jako SPAM
IP: 85.135.133.–
liborb
~ Redaktor
+18
Guru
5. 12. 2009   #2
-
0
-

Když chceš přidat záznam někam jinam než na konec, tak je jenom o něco málo složitější.
Budeme přidávat ZA. Máš ten prvek, za který chceš nový přidat. Ten přes dalsi ukazuje na další prvek v seznamu. A postup je následující:
- založíš nový prvek
- do jeho dalsi uložíš ukazatel na ten další z původního ZA prvku
- do ukazatele dalsi v ZA daš svůj nový prvek
A to je celé. Prostě se ti nesmí "ztratit" ukazatel.

Nahlásit jako SPAM
IP: 91.203.96.–
liborb
~ Redaktor
+18
Guru
5. 12. 2009   #3
-
0
-

Když chceš přidat záznam někam jinam než na konec, tak je jenom o něco málo složitější.
Budeme přidávat ZA. Máš ten prvek, za který chceš nový přidat. Ten přes dalsi ukazuje na další prvek v seznamu. A postup je následující:
- založíš nový prvek
- do jeho dalsi uložíš ukazatel na ten další z původního ZA prvku
- do ukazatele dalsi v ZA daš svůj nový prvek
A to je celé. Prostě se ti nesmí "ztratit" ukazatel.

Nahlásit jako SPAM
IP: 91.203.96.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 59 hostů

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý