C - zoznamy
-
ultimate222
Light Star
- Príspevky: 263
- Registrovaný: 10 júl 2011, 14:17
- Bydlisko: Zvolen
C - zoznamy
Neviete o nejakej dobrej literature (dostupnej na nete by bolo naj) odkial sa da naucit o zoznamoch v c-ku prepajanych smernikmi ?
nieco kde to je dobre, polopatisticky vysvetlene
nieco kde to je dobre, polopatisticky vysvetlene
-
reDo
Star
- Príspevky: 661
- Registrovaný: 26 apr 2009, 18:36
- Bydlisko: 00100100
- Kontaktovať používateľa:
Re: C - zoznamy
Kód: Vybrať všetko
struct Uzol
{
int hodnota; // miesto pre data
Uzol * dalsi; // pointer na dalsi
};-
audiotrack
VIP
- Príspevky: 25958
- Registrovaný: 09 sep 2005, 18:39
- Kontaktovať používateľa:
Re: C - zoznamy
a v prípade obojsmerného (cyklického) zoznamu tam budú dva ukazatele. Hotovo, zvyšných 300 strán v tvojej pomyselnej literatúre bude len zbytočný obkec 
-
ultimate222
Light Star
- Príspevky: 263
- Registrovaný: 10 júl 2011, 14:17
- Bydlisko: Zvolen
Re: C - zoznamy
a ako sa potom zapisuje do toho zoznamu ? Ako vlozim nejake hodnoty do jednotlivych "poloziek" ?
Uzol.hodnota = 5;
a potom do dalsieho uzla ako vlozim hodnotu ?
Uzol.hodnota = 5;
a potom do dalsieho uzla ako vlozim hodnotu ?
-
audiotrack
VIP
- Príspevky: 25958
- Registrovaný: 09 sep 2005, 18:39
- Kontaktovať používateľa:
Re: C - zoznamy
Uzol->dalsi->hodnota = 5;
-
ultimate222
Light Star
- Príspevky: 263
- Registrovaný: 10 júl 2011, 14:17
- Bydlisko: Zvolen
Re: C - zoznamy
a aky je v tom rozdiel ked sa to robi takto?
s tymi sipkami myslim
Kód: Vybrať všetko
struct node* head = NULL;
struct node* second = NULL;
head = malloc(sizeof(struct node));
second = malloc(sizeof(struct node));
head->data = 1;
head->next = second;-
audiotrack
VIP
- Príspevky: 25958
- Registrovaný: 09 sep 2005, 18:39
- Kontaktovať používateľa:
Re: C - zoznamy
(*ukazatel).hodnota = 20;
ukazatel->hodnota = 20;
tieto dva zápisy sú ekvivalentné. Šípka zdereferencuje rovnako ako hviezdička, je to len krajší spôsob zápisu
ukazatel->hodnota = 20;
tieto dva zápisy sú ekvivalentné. Šípka zdereferencuje rovnako ako hviezdička, je to len krajší spôsob zápisu
-
ultimate222
Light Star
- Príspevky: 263
- Registrovaný: 10 júl 2011, 14:17
- Bydlisko: Zvolen
Re: C - zoznamy
aha, diky ... takze kebyze mam tu strukturu Uzol ktoru sem postol reDo, tak by som do zoznamu zapisoval prvky takto?
dalsi->hodnota = 20;
a potom do nasledujuceho uzla zase dalsi->hodnota = 30; ? .. ze napriklad v nejakom cykle by som to robil a takto by sa zapisali hodnoty do celeho zoznamu ?
dalsi->hodnota = 20;
a potom do nasledujuceho uzla zase dalsi->hodnota = 30; ? .. ze napriklad v nejakom cykle by som to robil a takto by sa zapisali hodnoty do celeho zoznamu ?
-
audiotrack
VIP
- Príspevky: 25958
- Registrovaný: 09 sep 2005, 18:39
- Kontaktovať používateľa:
Re: C - zoznamy
a prečo tieto teoretické otázky? Skús a uvidíš
Lepšie si to tak zapamätáš ako keď ti odpoviem že áno
-
ultimate222
Light Star
- Príspevky: 263
- Registrovaný: 10 júl 2011, 14:17
- Bydlisko: Zvolen
Re: C - zoznamy
Mam teraz takyto kod na zoznam ... simulacia Stack-u, cize mozem vkladat a vyberat len posledny prvok
Pop vybera prvok a treba mi spravit funkciu Push, ktora vlozi prvok za posledny prvok, skusal som nejak takto ale nejde to, ako by to malo byt ?
prototyp musi byt: Push( TElement X, Stack S )
Kód: Vybrať všetko
#include "stackl.h"
#include "fatal.h"
#include <stdlib.h>
struct Node
{
TElement Element;
PtrToNode Next;
};
int
IsEmpty( Stack S )
{
return S->Next == NULL;
}
Stack
CreateStack( void )
{
Stack S;
S = malloc( sizeof( struct Node ) );
if( S == NULL )
FatalError( "Out of space!!!" );
S->Next = NULL;
MakeEmpty( S );
return S;
}
void
MakeEmpty( Stack S )
{
if( S == NULL )
Error( "Must use CreateStack first" );
else
while( !IsEmpty( S ) )
Pop( S );
}
void
DisposeStack( Stack S )
{
MakeEmpty( S );
free( S );
}
TElement
Top( Stack S )
{
if( !IsEmpty( S ) )
return S->Next->Element;
Error( "Empty stack" );
return 0; /* Return value used to avoid warning */
}
void
Pop( Stack S )
{
PtrToNode FirstCell;
if( IsEmpty( S ) )
Error( "Empty stack" );
else
{
FirstCell = S->Next;
S->Next = S->Next->Next;
free( FirstCell );
}
}prototyp musi byt: Push( TElement X, Stack S )
Kód: Vybrať všetko
void
Push( TElement X, Stack S )
{
if(IsEmpty(S)) S->Next->Element = X;
else
S->Next->Next->Element = X;
}