Newsgroup: it.comp.lang.c
Titolo: Aiuto CODA

Ragazzi....ho bisogno di un aiutino... ;)
Non riesco a trovare in rete qualcosa di decente riguardo le code
implementate in C.
Ho cercato con google, su 
www.planetsourcecode.com
 ma o sono in C++, oppure
implementati mediante unit e cavoli vari.....
Qualcuno di voi sa dove potrei reperire un bel codice di esempio sulle
operazioni base per le code?
Ne ho bisogno per vedere se i miei ragionamenti sono giusti o no...
Aiuto..... :(같같같

 Ne ho bisogno per vedere se i miei ragionamenti sono giusti o no...
Facci vedere il codice :)
Luca
-- 
Home: 
http://kronoz.cjb.net
Let me make your mind, leave yourself behind
Be not afraid

Dovrebbe essere così: ti tieni due puntatori, uno all'inizio della coda e
uno alla fine. Ogni elemento è legato al successivo (singolo link, NON
doppio). Inserisci gli elementi alla fine e li estrai dall'inizio (in
entrambe i casi devi cambiare uno dei due puntatori che avevi)
Così avrai tempo costante sia per inserimento ed estrazione.
Chiaramente se vuoi poter navigare la coda partendo da entrambe le direzioni
e/o estrarre elementi da entrambe i lati in tempo costante allora ti servirà
una lista a doppio link.
Per quanto riguarda il fatto che siano implementate in c++, è più che altro
una forma mentis... Dove leggi class tu devi immaginare struct, dove leggi
"metodo1(...)" devi immaginare "metodo1(mystruct* ptr, ...)" e così via.
Tu volevi una coda FIFO, vero? Perchè per una LIFO ti basta un puntatore
(all'ultimo elemento inserito)
--- bye

implementati mediante unit e cavoli vari.....
Quando le ho studiate io all'universita', avavamo implementato delle
strutture dinamiche basate su una struttura a nodi:
typedef float item;
typedef struct theNode{
	struct theNode *next;
	item value;
} node;
Quindi, collegando piu' nodi, si ottiene una cosa tipo:
  nodo1         nodo2            nodo3
 -------       -------         ---------
| v | p-|---->| v | p-|------>| v | NULL|
 -------       -------         ---------
Poi, usi questi nodi per implementare una coda. Ad esempio:
typedef *node queue;
e poi scrivi i metodi, tenendo conto del funzionamento della coda
(tieni conto che li sto scrivendo cosi' a getto senza nemmeno
provarli, sicuramente avro' fatto errori, e' per dare l'idea):
/*una coda vuota e' semplicemente NULL*/
queue newQueue(void){
	return NULL;
}
int isEmpty(queue q){
	if(q == NULL)
		return 1;
	return 0;
}
/*l'inserimento avviene creando un nodo e appendendolo alla fine*/
queue insert(queue q, item i){
	node* n;
	n = malloc(sizeof(node));
	n->next = q;
	n->value = i;
	return n;
}
/*la cancellazione avviene eliminando l'elemento all'inizio*/
queue delete(queue q){
	node* temp;
	if (isEmpty(q))
		return q;
	if(q->next == NULL){
		free(q);
		return NULL;
	}
	temp = q;
	while((temp->next)->next != NULL)
		temp = temp->next;
 
	free(temp->next);
	temp->next = NULL;
	return q;
}
ecc....
Ciao,
Zeppe

 (all'ultimo elemento inserito)
Ma una LIFO non si chiama "pila"?
Marcello

 Ma una LIFO non si chiama "pila"?
Nei corsi di informatica di solito i due argomenti vengono trattati nella
stessa lezione, e quindi si parla genericamente di "code" (domani
esercitazione sulle "code"... :-) ). Per essere sicuri la cosa migliore è
chiedere se sono FIFO o LIFO :-) Cmq è vero, una LIFO è una Pila (stack)
--- bye