Originariamente inviato da haidi8

grazie mille,ma io devo usare i puntatori in più devo considerare la coda "circolare"...forse prima non mi son spiegata bene...ma sto programma mi sta esaurendo
Un dubbio: la tua function di estrazione estrae in testa alla coda?
Con "coda circolare" intendi una lista sequenziale di tipo:
codice:
typedef int index;
void init(struct list *ptr, index size);/*inizializzazione delle variabili dentro la struct*/
//operazioni sulla lista
bool pre_insert(struct list *ptr,int value);/*inserimento in testa alla lista*/
void visit(struct list *ptr);/* visita*/
bool search(struct list *ptr, int value);/* ricerca elemento preso in input*/
int main(void)
{
struct list lista;
index dim;
int value;
int scelta;
static bool ins;
scelta = 1;
ins = true;
printf("Dammi la dimensione della lista: ");
scanf("%d", &dim);
printf("\n");
init(&lista, dim);
while(scelta != 0){
printf("\n\n1) Inserisci un nuovo valore\n");
printf("2) Visualizza il contenuto della lista\n");
printf("4) Ricerca di un elemento\n");
printf("0) Esci\n");
printf("Scegli un opzione: ");
scanf("%d",&scelta);
switch(scelta){
case 1:
if(ins==false)
printf("\nLista piena");
else
{
printf("\nInserisci valore: ");
scanf("%d",&value);
ins = pre_insert(&lista, value);
}
break;
case 2:
visit(&lista);
break;
case 4:
printf("\nInserisci valore: ");
scanf("%d",&value);
if(search(&lista, value) == false)
printf("\nValore non presente");
else
printf("\nValore %d presente", value);
break;
}
}
return 0;
}
void init(struct list *ptr, index size){
ptr->size = size;
ptr->head = 0;
ptr->tail = 0;
ptr->buffer = (int*) malloc(sizeof(int*) * ptr->size);
}
bool pre_insert(struct list *ptr,int value){
if(ptr->head != -(ptr->tail + (ptr->size - 1)) % ptr->size){
ptr->head = (ptr->head - 1) % ptr->size;
ptr->buffer[ptr->head] = value;
return true;
}
else
return false;
}
void visit(struct list *ptr){
index position;
position = ptr->head;
printf("Valori della lista: \n");
while(position != ptr->tail){
printf("%d ",ptr->buffer[position]);
position=(1 + position) % ptr->size;
}
}
bool search(struct list *ptr, int value){
bool found;
index position;
found = false;
position = ptr->head;
while((found == false) && (position != ptr->tail)){
if(ptr->buffer[position]==value)
found = true;
else
position = (position+1) % ptr->size;
}
return found;
}