Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdlib.h>
- #include <stdio.h>
- #include <ctype.h>
- typedef struct element {
- int dana;
- struct element *nast;
- } stos;
- void inicjuj (stos **lista)
- {
- *lista=NULL;
- }
- void push(stos **lista,int wartosc) {
- stos *pom;
- pom=(stos*) malloc (sizeof(stos));
- pom->dana=wartosc;
- pom->nast=*lista;
- *lista=pom;
- }
- int pop(stos **lista, int arg) {
- stos *wskaz;
- if (*lista==NULL)
- printf("Stos pusty");
- else {
- arg=(*lista)->dana;
- wskaz=*lista;
- *lista=(*lista)->nast;
- free(wskaz);
- return arg;
- }
- }
- int empty(stos **lista) {
- int licz;
- stos *elem;
- if (*lista==NULL)
- printf("Stos jest pusty\n");
- elem=*lista;
- for(licz=0;elem!=NULL;licz++)
- elem=elem->nast;
- printf("%d\n", licz);
- }
- void print(stos **lista) {
- stos *elem;
- elem=*lista;
- while (elem!=NULL) {
- printf("%d ", elem->dana);
- elem=elem->nast;
- }
- printf("\n");
- }
- int main(){
- int liczba,arg1,arg2;
- char oper=0, e=0;
- stos *lista;
- inicjuj(&lista);
- printf("Pomoc(menu) dostępne pod przyciskiem 'h'\n");
- while (oper!='q'){
- oper=getc(stdin);
- if (isdigit(oper) ) {
- ungetc(oper, stdin);
- scanf("%d", &liczba);
- push (&lista, liczba);
- }
- else
- switch (oper)
- {
- case '+': /*dodawanie*/
- arg1=pop(&lista, arg1);
- arg2=pop(&lista, arg2);
- push(&lista, arg1+arg2);
- break;
- case '-': /*odejmowanie*/
- e=getc(stdin);
- if (isdigit(e))
- {
- ungetc(e, stdin);
- scanf("%d", &liczba);
- push(&lista, 0-liczba);
- }
- else
- {
- ungetc(e, stdin);
- arg1=pop(&lista, arg1);
- arg2=pop(&lista, arg2);
- push(&lista, arg1-arg2);
- }
- break;
- case '*': /*mnozenie*/
- arg1=pop(&lista, arg1);
- arg2=pop(&lista, arg2);
- push(&lista, arg1*arg2);
- break;
- case '/': /*dzielenie*/
- arg1=pop(&lista, arg1);
- arg2=pop(&lista, arg2);
- push(&lista, arg1/arg2);
- break;
- case '#': /*usun*/
- pop(&lista,arg1);
- break;
- case '$': /*zamien*/
- arg1=pop(&lista, arg1);
- arg2=pop(&lista, arg2);
- push(&lista, arg1);
- push(&lista, arg2);
- break;
- case '&': /*duplikuj*/
- arg1=pop(&lista, arg1);
- push(&lista, arg1);
- push(&lista, arg1);
- break;
- case '?': /*wywietl stos*/
- print(&lista);
- break;
- case 'e': /*sprawdza czy pusty i podaje ile elementow*/
- empty(&lista);
- break;
- case 'q': /*wyjscie*/
- return 0;
- case ' ':
- break;
- case '\n':
- break;
- case 'h': /*Pomoc(menu)*/
- printf("Pomoc(menu)\n");
- printf("'-' Odejmowanie\n");
- printf("'+' Dodawanie\n");
- printf("'*' Mnozenie\n");
- printf("'/' Dzielenie\n");
- printf("'#' Usun ostatni element\n");
- printf("'$' Zamień dwa elementy miejscem\n");
- printf("'&' Duplikuj ostatni element\n");
- printf("'?' Wyswietl stos\n");
- printf("'e' Sprawdz czy stos jest pust/podaj liczbe elementow na stosie\n");
- printf("'q' Wyjscie z programu\n");
- break;
- default:
- printf("zle podany znak\n");
- break;
- }
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement