Fórum Root.cz

Hlavní témata => Vývoj => Téma založeno: petrjah2 23. 03. 2012, 22:12:26

Název: Jazyk C - práce se zásobníkem
Přispěvatel: petrjah2 23. 03. 2012, 22:12:26
Ahoj, potřeboval v céčku napsat algoritumus

Citace
Program postupně bude brát slova ze vstupu.
Pokud načetl číslo, přidá jej na vrchol zásobníku.
Pokud načetl operátor, vezme dvě čísla z vrcholu zásobníku, aplikuje na ně načtený operátor a výsledek uloží zpět na zásobník.

V C++ je vrchol zásobníku pop().  Jak se berou čísla z vrcholu zásobníku jen v C? Děkuji
Název: Re:Jazyk C - práce se zásobníkem
Přispěvatel: branchman2 23. 03. 2012, 22:21:52
Cau, C-cko v standarde afaik nema implementovane funkcie na priame ovladanie zasobniku z tvojho programu (ak ti ako zasobnik nestaci volanie funkcii). Mas ale pointery (napr. int *pcislo) a structy (struct cislodalsi { int cislo; struct cislodalsi *next; };), vdaka comu si mozes sam (pomerne lahko) implementovat zasobnik.
Název: Re:Jazyk C - práce se zásobníkem
Přispěvatel: Kit 24. 03. 2012, 09:09:32
V C++ je vrchol zásobníku pop().  Jak se berou čísla z vrcholu zásobníku jen v C? Děkuji

Úplně stejně jako v C++, jen si tu funkci pop() budeš muset sám napsat.
Název: Re:Jazyk C - práce se zásobníkem
Přispěvatel: Radovan 24. 03. 2012, 10:15:39
Řekl bych že to nemělo být myšlené tak, aby pracoval přímo se zásobníkem procesoru, ale že ten program má používat svůj vlastní zásobník. Nepřipadá mi jako dobrý nápad míchat zadávaná čísla a návratové adresy... ;-)
Název: Re:Jazyk C - práce se zásobníkem
Přispěvatel: bedna 24. 03. 2012, 10:24:16
Řekl bych že to nemělo být myšlené tak, aby pracoval přímo se zásobníkem procesoru, ale že ten program má používat svůj vlastní zásobník. Nepřipadá mi jako dobrý nápad míchat zadávaná čísla a návratové adresy... ;-)

Už bych to nechlastal být tebou...  ;D
Název: RTFM
Přispěvatel: Zadané jméno nejde použít 24. 03. 2012, 10:55:32
Zasobnik pro Cecko je v hlavicce sys/queue.h, prectete si man queue, tam je vse popsane.
Název: Re:RTFM
Přispěvatel: Pali 24. 03. 2012, 11:30:10
Zasobnik pro Cecko je v hlavicce sys/queue.h, prectete si man queue, tam je vse popsane.

Az na to, ze sys/queue.h nie je v norme C99 a dokonca ani v POSIX-e. Takze nenazyval by som to "zasobnik pre Cecko"...
Název: Re:Jazyk C - práce se zásobníkem
Přispěvatel: argtwetwetwertw 24. 03. 2012, 11:52:11
ucitelovi slo o princip, takze si udelej treba nejaky linked list ktery reprezentuje zasobnik, pak naimplementuj funkce push, pop a pripadne dalsi operace.
napriklad jak to funguje v programovacim jazyku postscript :-)
Název: Re:RTFM
Přispěvatel: Zadané jméno nejde použít 24. 03. 2012, 16:23:31
Citace
Az na to, ze sys/queue.h nie je v norme C99 a dokonca ani v POSIX-e. Takze nenazyval by som to "zasobnik pre Cecko"...
Praxi mam overeno, ze dana hlavicka je na linuxu, solarisu, macosu, freebsd (gcc, icc) a widnows (gcc, ms vis. stud.) a proto to tak s klidnym svedomim nazivam.
Název: Re:Jazyk C - práce se zásobníkem
Přispěvatel: Rudolf Klusal 24. 03. 2012, 19:53:28
Přesně tak, pokud nemáš využít sys/queque.h, budeš si muset implementovat přímo zásobník sám. Doporučuji si udělat:

Kód: [Vybrat]
typedef struct lifo
{
  int cislo;
  struct lifo *next;
} LIFO;

LIFO *first;

A napsat si funkce, které ho ovládají. Zapomněl jsem při psaní, co se do něho mělo ukládat, takže akorát změň to "int cislo" na něco, co je dle zadání ;) ;) ;)

Obecně si můžeš najít nějaký zřetězený seznam (klidně i obousměrně) a odkoukat to tam, zásobník je jednodušší (páč neřešíš obousměrné vztahy, jen přendaváš prvního ;) ;))
Název: Re:Jazyk C - práce se zásobníkem
Přispěvatel: Erich Stark 31. 03. 2012, 19:54:12
Takto by mohla vyzera funkcia na pridavanie prvku na zaciatok ;)
Az by si mal nejake otazky tak sa pytaj..

Kód: [Vybrat]
struct Item* push_front(struct Item* begin, int value)
{
struct Item* novy = (struct Item*) malloc (sizeof(struct Item));

novy->hodnota = value;
novy->next = begin;
begin = novy;

return begin;
}