Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- Gestire un vettore come una coda circolare
- */
- #include <stdio.h>
- #include <stdlib.h> // Libreria standard (fornisce la funzione "exit()")
- int isFull(int [], int); // Controllo coda piena
- int isEmpty(int [], int); // Controllo coda vuota
- int pop(int [], int); // Estrazione elemento
- void push(int, int[], int); // Inserimento elemento
- int main() {
- 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
- for(i = 0; i<10; i++){ // Inizializzazione del vettore con solo zeri (0 => posizione vuota)
- v[i] = 0;
- }
- while(1){
- printf("Cosa vuoi fare?\n");
- printf("1) Push\n");
- printf("2) Pop\n");
- printf("3) Stampa coda\n");
- printf("DEFAULT) Esci\n");
- printf("--> ");
- scanf("%d", &ch);
- switch(ch){
- case 1: // Push
- if(isFull(v,10)){ // Se la coda è piena, restituisco un messaggio di errore
- printf("La coda è piena, inserimento non consentito\n");
- }else{ // Altrimenti procedo all'inserimento
- if(h == 10){ // Se la testa ha superato l'ultima posizione disponibile, la riporto all'indice zero
- h = 0;
- }
- printf("--> ");
- scanf("%d", &e);
- while(e == 0){
- printf("Valore non consentito. Scegline un altro\n --> ");
- scanf("%d", &e);
- }
- push(e, v, h); // Inserisco l'elemento "e" nella posizione "h" del vettore "v"
- h++; // Aumento di 1 l'indice della testa
- }
- break;
- case 2: // Pop
- if(isEmpty(v,10)){
- printf("La coda è vuota, estrazione non consentita\n");
- }else{
- if(t == 10){
- t = 0;
- }
- e = pop(v,t); // Estraggo il primo elemento disponibile e lo salvo in "e"
- printf("%d\n", e); // Stampo "e"
- t++; // Incremento l'indice della coda di 1
- }
- break;
- case 3: // Stampa coda
- for(i = 0;i<10;i++){
- printf("%d\n", v[i]);
- }
- break;
- default: // Uscita
- exit(0);
- break;
- }
- }
- return 0;
- }
- int isFull(int v[],int d){ // Funzione per determinare se il vettore è pieno (v[] => vettore, d => dimensione)
- int i = 0,r = 1; // i = contatore; r = valore di ritorno (1 => vettore pieno, 0 => vettore non pieno)
- while(i<d){ // Scorro tutto il vettore
- if(v[i] == 0){ // Se trovo anche un solo elemento uguale a zero, allora il vettore NON è pieno
- r = 0;
- break;
- }
- i++;
- }
- return r;
- }
- int isEmpty(int v[], int d){ // Funzione per determinare se il vettore è vuoto (v[] => vettore, d => dimensione)
- int i = 0,r = 1; // i = contatore; r = valore di ritorno (1 => vettore vuoto, 0 => vettore non vuoto)
- while(i<d){ // Scorro tutto il vettore
- if(v[i] != 0){ // Se trovo anche un solo elemento diverso da zero, allora il vettore NON è vuoto
- r = 0;
- break;
- }
- i++;
- }
- return r;
- }
- int pop(int v[], int t){ // Funzione pop (v = vettore, t = indice della coda)
- int r;
- r = v[t]; // Prendo il valore di v[t]
- v[t] = 0; // Svuoto v[t]
- return r; // Ritorno il valore precedente di v[t]
- }
- void push(int e, int v[], int h){ // Funzione push (e = elemento da inserire, v = vettore, h = indice della testa)
- v[h] = e; // Inserisco il valore di e in v[h]
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement