Structuri de date – Coada (FIFO – First In First Out)

O coadă (în engleză queue) este o structură de tip FIFO (First In First Out = Primul venit primul servit), în care toate inserările se fac la un capăt al ei (numit capul cozii) iar ştergerile (extragerile) (în general orice acces) se fac la celălalt capăt (numit sfârşitul cozii). în cazul cozii, avem nevoie de doi pointeri, unul către primul element al cozii (capul cozii), iar altul către ultimul său element (sfârşitul cozii). Există şi o variantă de coadă circulară, în care elementele sunt legate în cerc, iar cei doi pointeri, indicând capul şi sfârşitul cozii, sunt undeva pe acest cerc.
în implementarea propusă în continuare, depunerea se face la începutul tabloului, depunere precedată de decalarea tuturor elementelor cu o poziţie la dreapta. Extragerea se face începând cu primul element din partea dreaptă.

#include "stdio.h"
#include "stdlib.h"
#include "conio.h"
#define SIZE 50
int queue [SIZE];
int ind_d=0;
void push(int i)
{
  int j;
  if (ind_d 0;j--) queue[j]=queue[j-1];
   queue[0]=i;
   ind_d++;
   printf("Am depus elementul %d\n",i);
   printf("Traversarea cozii:");
    for(j=ind_d-1;j >= 0;j--) printf("%d ",queue[j]);
    putchar("\n");
  }
  else
  {
    printf("Coada este plina!\n");
    exit(1);
  }
}

int pop(void)
{
  if(ind_d>0)
  {
    ind_d--;
    return(queue[ind_d]);
  }
  else
  {
    printf("Coada vida");
    exit(1);
  }
}

void main(void)
{
  int val,k;
  do
  {
    printf("Introduceţi un nr intreg pt depunere (-1 pt ieşire si o pt extragere):");
    scanf("%d",&val);
    if(val!=0&&val!=-1)
      push(val);
    else
      if(!val)
      {
      printf("Am extras elementul %d\n",pop());
      printf("Traversarea cozii: ");
      for(k=ind_d-1;k >= 0;k--) printf("%d ",queue[k]);
      putchar("\n");
    }
  } while(val!=-1);
}

Leave a Reply

Your email address will not be published. Required fields are marked *

three − one =

Time limit is exhausted. Please reload CAPTCHA.