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!