Code con liste
Ancora problemi con le liste.
Questa è l'interfaccia di una coda mediante liste:
Questa è l'interfaccia di una coda mediante liste:
/*Implementazione del queue ADT */
/*Liste concatenate*/
#include <stdio.h>
#include <stdlib.h>
#include "queueADT3.h"
struct node{ /*struttura del nodo*/
Item data;
struct node *next;
};
struct queue_type{
struct node *top;/*puntatore al primo nodo della lista*/
struct node *end;
};
//N.B. avremmo potuto mettere struct node*Stack come puntatore al primo nodo ma così
//avremmo dovuto cambiare il client
static void terminate(const char *message)
{
printf("%s\n",message);
exit(EXIT_FAILURE);
}
Queue create(void)
{
/*Alloco nodo*/
Queue s=malloc(sizeof(struct queue_type));/*puntatore alla struttura*/
if(s==NULL)
terminate("Error in create:queue could not be created");
s->top=NULL;
s->end=NULL;
return s;
}
void destroy(Queue s)
{
make_empty(s);
free(s);
}
void make_empty(Queue s)
{
while(!is_empty(s));
dequeue(s);
}
bool is_empty(Queue s)
{
return s->top==NULL;
}
bool is_full(Queue s)
{
return false;
}
/*Inserimento del primo elemento */
void enqueue1(Queue s, Item i)
{
struct node *new_node=malloc(sizeof(struct node));
if(new_node==NULL)
terminate("Error in enqueue:queue is full");
new_node->data=i;
new_node->next=NULL;
s->top=new_node;/*sia s->top che s->end puntano al nodo (unico )*/
s->end=new_node;
}
/*Inserimento successivi elementi*/
void enqueue(Queue s, Item i)
{
struct node *new_node=malloc(sizeof(struct node));
if(new_node==NULL)
terminate("Error in enqueue:queue is full");
new_node->data=i;
new_node->next=NULL;
s->end->next=new_node;
s->end=new_node;
}
Item dequeue(Queue s)
{
struct node *old_top;
Item i;
if(is_empty(s))
terminate("Error in dequeue:queue is empty");
old_top=s->top;
i=old_top->data;
s->top=old_top->next;
free(old_top);
return i;
}
Risposte
E quale sarebbe il problema?
nel controllo se la coda è vuota!