Jazyk C - práce se zásobníkem

Jazyk C - práce se zásobníkem
« kdy: 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


branchman2

Re:Jazyk C - práce se zásobníkem
« Odpověď #1 kdy: 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.

Kit

Re:Jazyk C - práce se zásobníkem
« Odpověď #2 kdy: 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.

Radovan

Re:Jazyk C - práce se zásobníkem
« Odpověď #3 kdy: 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... ;-)

bedna

Re:Jazyk C - práce se zásobníkem
« Odpověď #4 kdy: 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


Zadané jméno nejde použít

RTFM
« Odpověď #5 kdy: 24. 03. 2012, 10:55:32 »
Zasobnik pro Cecko je v hlavicce sys/queue.h, prectete si man queue, tam je vse popsane.

Pali

Re:RTFM
« Odpověď #6 kdy: 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"...

argtwetwetwertw

Re:Jazyk C - práce se zásobníkem
« Odpověď #7 kdy: 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 :-)

Zadané jméno nejde použít

Re:RTFM
« Odpověď #8 kdy: 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.

Re:Jazyk C - práce se zásobníkem
« Odpověď #9 kdy: 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 ;) ;))

Re:Jazyk C - práce se zásobníkem
« Odpověď #10 kdy: 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;
}