Advertisement
Guest User

Untitled

a guest
Jan 18th, 2017
89
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.04 KB | None | 0 0
  1. #include <stdlib.h>
  2. #include <stdio.h>
  3. #include <ctype.h>
  4.  
  5. typedef struct element {
  6. int dana;
  7. struct element *nast;
  8. } stos;
  9.  
  10. void inicjuj (stos **lista)
  11. {
  12.   *lista=NULL;
  13. }
  14. void push(stos **lista,int wartosc) {
  15. stos *pom;
  16.  
  17. pom=(stos*) malloc (sizeof(stos));
  18. pom->dana=wartosc;
  19. pom->nast=*lista;
  20. *lista=pom;
  21. }
  22.  
  23.  
  24. int pop(stos **lista, int arg) {
  25. stos *wskaz;
  26.  
  27. if (*lista==NULL)
  28. printf("Stos pusty");
  29.  
  30. else {
  31. arg=(*lista)->dana;
  32. wskaz=*lista;
  33. *lista=(*lista)->nast;
  34. free(wskaz);
  35.  return arg;
  36. }
  37. }
  38.  
  39.  
  40. int empty(stos **lista) {
  41. int licz;
  42. stos *elem;
  43.  
  44.  
  45. if (*lista==NULL)
  46.  
  47. printf("Stos jest pusty\n");
  48. elem=*lista;
  49.  
  50. for(licz=0;elem!=NULL;licz++)
  51.     elem=elem->nast;
  52.     printf("%d\n", licz);
  53.  
  54. }
  55.  
  56.  
  57. void print(stos **lista) {
  58. stos *elem;
  59.  
  60. elem=*lista;
  61.  
  62. while (elem!=NULL) {
  63. printf("%d ", elem->dana);
  64. elem=elem->nast;
  65. }
  66. printf("\n");
  67. }
  68.  
  69.  
  70. int main(){
  71.  
  72.  int liczba,arg1,arg2;
  73.  char oper=0, e=0;
  74.  stos *lista;
  75.  inicjuj(&lista);
  76.  printf("Pomoc(menu) dostępne pod przyciskiem 'h'\n");
  77.  
  78.  while (oper!='q'){
  79.    oper=getc(stdin);
  80.    
  81.  if (isdigit(oper) ) {
  82.  
  83.    ungetc(oper, stdin);
  84.    scanf("%d", &liczba);
  85.    push (&lista, liczba);
  86.  }
  87.  else
  88.     switch (oper)
  89.      {
  90.     case '+': /*dodawanie*/
  91.      arg1=pop(&lista, arg1);
  92.      arg2=pop(&lista, arg2);
  93.      push(&lista, arg1+arg2);
  94.      break;
  95.      
  96.     case '-': /*odejmowanie*/
  97.     e=getc(stdin);
  98.    
  99.     if (isdigit(e))
  100.     {
  101.           ungetc(e, stdin);
  102.           scanf("%d", &liczba);
  103.           push(&lista, 0-liczba);
  104.     }
  105.     else
  106.     {
  107.      ungetc(e, stdin);
  108.      arg1=pop(&lista, arg1);
  109.      arg2=pop(&lista, arg2);
  110.      push(&lista, arg1-arg2);
  111.     }
  112.      break;
  113.  
  114.     case '*': /*mnozenie*/
  115.      arg1=pop(&lista, arg1);
  116.      arg2=pop(&lista, arg2);
  117.      push(&lista, arg1*arg2);
  118.      break;
  119.  
  120.     case '/': /*dzielenie*/
  121.      arg1=pop(&lista, arg1);
  122.      arg2=pop(&lista, arg2);
  123.      push(&lista, arg1/arg2);
  124.      break;
  125.    
  126.     case '#': /*usun*/
  127.     pop(&lista,arg1);
  128.     break;
  129.        
  130.     case '$': /*zamien*/
  131.      arg1=pop(&lista, arg1);
  132.      arg2=pop(&lista, arg2);
  133.      push(&lista, arg1);
  134.      push(&lista, arg2);
  135.      break;
  136.    
  137.     case '&': /*duplikuj*/ 
  138.      arg1=pop(&lista, arg1);
  139.      push(&lista, arg1);
  140.      push(&lista, arg1);
  141.      break;
  142.      
  143.     case '?': /*wywietl stos*/
  144.       print(&lista);
  145.       break;
  146.      
  147.     case 'e': /*sprawdza czy pusty i podaje ile elementow*/
  148.       empty(&lista);
  149.       break;
  150.        
  151.     case 'q': /*wyjscie*/
  152.      return 0;
  153.    
  154.     case ' ':
  155.      break;
  156.    
  157.     case '\n':
  158.      break;
  159.  
  160.     case 'h': /*Pomoc(menu)*/
  161.      printf("Pomoc(menu)\n");
  162.      printf("'-' Odejmowanie\n");
  163.      printf("'+' Dodawanie\n");
  164.      printf("'*' Mnozenie\n");
  165.      printf("'/' Dzielenie\n");
  166.      printf("'#' Usun ostatni element\n");
  167.      printf("'$' Zamień dwa elementy miejscem\n");
  168.      printf("'&' Duplikuj ostatni element\n");
  169.      printf("'?' Wyswietl stos\n");
  170.      printf("'e' Sprawdz czy stos jest pust/podaj liczbe elementow na stosie\n");
  171.      printf("'q' Wyjscie z programu\n");
  172.      break;
  173.        
  174.  default:
  175.    printf("zle podany znak\n");
  176.    break;
  177.      }
  178.  }
  179. return 0;
  180. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement