home *** CD-ROM | disk | FTP | other *** search
/ ftp.disi.unige.it / 2015-02-11.ftp.disi.unige.it.tar / ftp.disi.unige.it / pub / .person / CataniaB / teach-act / laboratorio / lab-26-4-99 / ese7-versione-con-stack.c < prev    next >
C/C++ Source or Header  |  1999-05-25  |  1KB  |  47 lines

  1. /* 
  2. * Stringhe con parentesi bilanciate: stack  
  3. */
  4. #include <stdio.h>
  5. #define MAX 100
  6. #define true 1
  7. #define false 0
  8.  
  9. int stack[MAX];
  10. int ptop;
  11.  
  12. void init(void)   {ptop=stack[ptop]=0;} /* stack vuoto se ptop=0 */
  13. void pop(void)    {if (ptop>0) ptop--;}
  14. void push(int el) {if (ptop<MAX) stack[++ptop]=el;} /* prima muovi ptop */
  15. int  top(void)    {return(stack[ptop]);}
  16.  
  17. main()
  18. {
  19.  char buf[MAX];
  20.  int i,continua;
  21.  
  22.  gets(buf);
  23.  printf("\n echo %s\n ",buf);
  24.  
  25.  init();
  26.  for(i=0,continua=true;(continua && buf[i]);i++) 
  27.    switch (buf[i])
  28.     {
  29.      case '[': case '(': case '{': 
  30.                push(buf[i]);
  31.                break;
  32.      case '}': if (top()=='{') pop();
  33.                else continua=false;
  34.                break;
  35.      case ']': if (top()=='[') pop();
  36.                else continua=false;
  37.                break;
  38.      case ')': if (top()=='(') pop();
  39.                else continua=false;
  40.                break;
  41.      default:;
  42.     }
  43.  if (continua && !ptop) printf("\nBilanciate\n");
  44.  else printf("\nNon Bilanciate\n");  
  45. }
  46.  
  47.