Coda

di il
1 risposte

Coda

Salve a tutti ho provato a creare una coda e le funzioni di inserimento e rimozione funzionano a quanto pare bene, infatti se inserisco gli elementi nella coda e poi voglio eliminarne qualcuno e infine stampare non c'è nessun problema. Diversamente se inserisco gli elementi nella coda poi STAMPO LA CODA E DOPO provo ad eliminare qualche numero dalla coda ebbene quest'ultima funzione di eliminazione mi restituisce numeri che nella coda non sono presenti. Non riesco a capire perchè se inverto l'ordine di esecuzione il risultato cambi . Posto il codice Grazie in anticipo


ITEM.H
typedef int item;
#define NULLITEM 0;

int eq(item x, item y);
void input_item(item *x);
void output_item(item x);

ITEM.C
#include <stdio.h>
#include "item.h"

int eq(item x, item y)
{
return x==y;
}
void input_item(item *x)
{
scanf("%d",x);
}
void output_item(item x)
{
printf("%d",x);
}

queue.h
typedef struct c_queue *queue;

queue newQueue();
int emptyQueue(queue q);
item dequeue(queue q);
int enqueue(item val,queue q);
void printQueue(queue q);


queue.c
#include <stdio.h>
#include <stdlib.h>
#include "item.h"
#include "queue.h"

struct node
{
item value;
struct node *next;
};

struct c_queue
{
struct node *head,*tail;//HEAD=PUNTATORE ALLA TESTA DELLA LISTA DELLA STRUTT NODE, TAIL puntatore ALL'ULTIMO ELEM. DELLA LISTA DELLA STRUCT NODE
int numel; //numeri nella coda
};
queue newQueue()
{
struct c_queue *q;
q=malloc(sizeof(struct c_queue));
if(q==NULL)
return NULL;
q->numel=0;
q->head=NULL;
q->tail=NULL;
return q;
}

int emptyQueue(queue q)
{
if(q==NULL)
return -1;
return q->numel==0;
}
//restituisce un intero che indica l'esito dell'operazione(inserimento)
int enqueue(item val, queue q)
{
if(q==NULL)
return -1;
struct node *nuovo;
nuovo=malloc(sizeof(struct node));
if(nuovo==NULL)
return 0;
nuovo->value=val;

if(q->head==NULL)
q->head=nuovo;
else
q->tail->next=nuovo; //inserimento in coda

q->tail=nuovo; //il nuovo nodo è la fine della coda
(q->numel)++;
return 1;
}
//toglie e restituisce l'elemento in testa alla coda
item dequeue(queue q)
{
if(q==NULL)
return NULLITEM;
if(q->numel==0)
return NULLITEM;

item result;
struct node *temp;
temp=q->head;
result=temp->value;
q->head=q->head->next;
if(q->head==NULL)
q->tail=NULL;
free(temp);
(q->numel)--;

return result;
}
void printQueue(queue q)
{
int i;
if(q==NULL)
printf("LA coda e' vuota\n");
else
{
for(i=0;i<q->numel;i++)
{
printf("%d \n",q->head->value);
q->head=q->head->next;
}
}
}

1 Risposte

  • Re: Coda

    Il codice deve essere postato con i tag appositi.

    Mancano le strutture item e queue...

    Inoltre: mai sentito parlare di indentazione??? Così non si capisce veramente nulla.



    Comunque, il tuo problema è semplice
    
    q->head = q->head->next;
    
    Con questo pezzo di codice spu.... smin.... scombini la coda modificando l'intera struttura.
    Per scorrere e stampare gli elementi usa una variabile di appoggio, se usi la coda direttamente la distruggi continuando a cambiare il valore del membro head.
Devi accedere o registrarti per scrivere nel forum
1 risposte