/* Stampanje infiksnog izraza u inverznoj poljskoj notaciji */ #include #include #include typedef char stek_elem; typedef struct stek_tag { stek_elem elem; struct stek_tag *preth; } stek; void push(stek_elem); stek_elem pop( void ); stek *vrh = NULL; main() { stek_elem c; printf("\nUneti ispravan infiksni izraz i zavrsiti sa ^Z\n"); while( (c = getchar()) != EOF ) { /* Kada se naidje na broj ispisuju se sve njegove cifre */ while(isdigit(c)) { printf("%c", c); c = getchar(); } /* Na ulazu nije cifra */ if(c != '(' && c != ' ') { printf(" "); switch (c) { /*Ukoliko se doslo do zatvorene zagrade - ispisuje se operacija */ case ')' : printf("%c", pop()); break; /* Ukoliko je ucitani karakter operacija - gura se na stek */ case '-' : case '/' : case '*' : case '+' : push(c); break; default : printf("Greska na ulazu");break; } } } /* Vrsi se ispis operacija koje su ostale na steku */ while(vrh != NULL) printf("%c", pop()); return 0; } /* Funkcija postavlja novi element na vrh steka*/ void push(stek_elem c) { stek *temp; temp = (stek *)malloc( sizeof(stek)); temp->elem = c; temp->preth = vrh; vrh = temp; } /* Funkcija vraca element koji se nalazi na vrhu steka */ /* pri tome se oslobadja prostor koji je elemnt zauzimao*/ stek_elem pop( ) { stek_elem temp = vrh->elem; stek *t = vrh; vrh = vrh->preth; free(t); return temp; }