Advertisement
u53r

Gestione di un array con coda circolare

Oct 27th, 2019
102
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.31 KB | None | 0 0
  1. /*
  2.   Gestire un vettore come una coda circolare
  3. */
  4. #include <stdio.h>
  5. #include <stdlib.h> // Libreria standard (fornisce la funzione "exit()")
  6. int isFull(int [], int); // Controllo coda piena
  7. int isEmpty(int [], int); // Controllo coda vuota
  8. int pop(int [], int); // Estrazione elemento
  9. void push(int, int[], int); // Inserimento elemento
  10.  
  11. int main() {
  12.   int v[10],i,e,ch,h = 0,t = 0; // v = vettore da gestire; i = contatore; e = elemento; ch = variabile per la scelta; h = indice testa; t = indice coda
  13.   for(i = 0; i<10; i++){ // Inizializzazione del vettore con solo zeri (0 => posizione vuota)
  14.     v[i] = 0;
  15.   }
  16.   while(1){
  17.     printf("Cosa vuoi fare?\n");
  18.     printf("1) Push\n");
  19.     printf("2) Pop\n");
  20.     printf("3) Stampa coda\n");
  21.     printf("DEFAULT) Esci\n");
  22.     printf("--> ");
  23.     scanf("%d", &ch);
  24.     switch(ch){
  25.       case 1: // Push
  26.       if(isFull(v,10)){ // Se la coda è piena, restituisco un messaggio di errore
  27.         printf("La coda è piena, inserimento non consentito\n");
  28.       }else{ // Altrimenti procedo all'inserimento
  29.         if(h == 10){ // Se la testa ha superato l'ultima posizione disponibile, la riporto all'indice zero
  30.           h = 0;
  31.         }
  32.         printf("--> ");
  33.         scanf("%d", &e);
  34.         while(e == 0){
  35.           printf("Valore non consentito. Scegline un altro\n --> ");
  36.           scanf("%d", &e);
  37.         }
  38.         push(e, v, h); // Inserisco l'elemento "e" nella posizione "h" del vettore "v"
  39.         h++; // Aumento di 1 l'indice della testa
  40.       }
  41.       break;
  42.       case 2: // Pop
  43.       if(isEmpty(v,10)){
  44.         printf("La coda è vuota, estrazione non consentita\n");
  45.       }else{
  46.         if(t == 10){
  47.           t = 0;
  48.         }
  49.         e = pop(v,t); // Estraggo il primo elemento disponibile e lo salvo in "e"
  50.         printf("%d\n", e); // Stampo "e"
  51.         t++; // Incremento l'indice della coda di 1
  52.       }
  53.       break;
  54.       case 3: // Stampa coda
  55.       for(i = 0;i<10;i++){
  56.         printf("%d\n", v[i]);
  57.       }
  58.       break;
  59.       default: // Uscita
  60.       exit(0);
  61.       break;
  62.     }
  63.   }
  64.   return 0;
  65. }
  66.  
  67. int isFull(int v[],int d){ // Funzione per determinare se il vettore è pieno (v[] => vettore, d => dimensione)
  68.   int i = 0,r = 1; // i = contatore; r = valore di ritorno (1 => vettore pieno, 0 => vettore non pieno)
  69.   while(i<d){ // Scorro tutto il vettore
  70.     if(v[i] == 0){ // Se trovo anche un solo elemento uguale a zero, allora il vettore NON è pieno
  71.       r = 0;
  72.       break;
  73.     }
  74.     i++;
  75.   }
  76.   return r;
  77. }
  78.  
  79. int isEmpty(int v[], int d){ // Funzione per determinare se il vettore è vuoto (v[] => vettore, d => dimensione)
  80.   int i = 0,r = 1; // i = contatore; r = valore di ritorno (1 => vettore vuoto, 0 => vettore non vuoto)
  81.   while(i<d){ // Scorro tutto il vettore
  82.     if(v[i] != 0){ // Se trovo anche un solo elemento diverso da zero, allora il vettore NON è vuoto
  83.       r = 0;
  84.       break;
  85.     }
  86.     i++;
  87.   }
  88.   return r;
  89. }
  90.  
  91. int pop(int v[], int t){ // Funzione pop (v = vettore, t = indice della coda)
  92.   int r;
  93.   r = v[t]; // Prendo il valore di v[t]
  94.   v[t] = 0; // Svuoto v[t]
  95.   return r; // Ritorno il valore precedente di v[t]
  96. }
  97.  
  98. void push(int e, int v[], int h){ // Funzione push (e = elemento da inserire, v = vettore, h = indice della testa)
  99.   v[h] = e; // Inserisco il valore di e in v[h]
  100. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement