|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Junior Member
Iscritto dal: Dec 2003
Messaggi: 2
|
Implementare una lista circolare.LINK CORRETTO
http://www-dft.ts.infn.it/%7Epastore...nti/linklist.c
dovrei risolvere queto problema: devo modificare le funzioni di una lista concatenata in modo che la lista diventi circolare(in particolare che il successivo dell' ultimo elemento e' il primo). In particolare devo scrivere una function che scriva il contenuto della lista a partire da un elemento arbitrario.scrivetimi anche mail se volete vedere anche la lista da modificare La lista da modificare si trova in questo sito... Avrei bisogno che qualcuno modificasse la lista e mi spigasse brevemente cosa è stato fatto Ultima modifica di cisoman : 22-12-2003 alle 01:10. |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Apr 2003
Città: www.dphoneworld.net - Aversa -News su iOS, Android e Windows Phone
Messaggi: 7665
|
EDITET. ERRORE
|
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Codice:
#define MAXLN 40
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct listanomi{
char nome[MAXLN];
struct listanomi *successivo;
};
typedef struct listanomi Listanomi; /* definisce Listanomi come nuovo nome
* del tipo dati struct listanomi */
Listanomi *inizio=NULL; /* "inizio" e' il puntatore all' inizio della
lista inizializzato a NULL */
Listanomi *crea_elemento( void )
/* alloca memoria per un nuovo elemento ritornando un puntatore a questo spazio */
/* N.B. la creazione di un nuovo elemento NON lo inserisce nella lista:
* nessun elemento punta ancora al nuovo e questo non punta a nessuno
* p->successivo punta a NULL */
{
Listanomi *p;
p = malloc(sizeof(Listanomi) );
if ( p == NULL )
{
printf( "crea_elemento: malloc failed \n");
exit(1);
}
p->successivo = NULL;
return p;
}
void aggiungi_elemento( Listanomi *e )
/* questa function aggiunge un elemento del tipo Listanomi alla lista
* di primo elemento "inizio" */
{
Listanomi *p;
if ( inizio == NULL)
{
inizio = e;
/*inizio->successivo = inizio;*/
return;
}
for( p = inizio; p->successivo != NULL; p = p->successivo)
;
p->successivo = e;
/*e->successivo = inizio;*/
return;
}
void inserisci_dopo(Listanomi *q, Listanomi *p)
/* inserisce l' elemento p dopo q nella lista */
{
if ( p == NULL || q == NULL || p==q || q->successivo == p )
{
printf("inserisci_dopo : inserzione non valida\n");
return;
}
p->successivo = q->successivo;
q->successivo = p;
return;
}
void elimina(Listanomi *eliminando)
{
Listanomi *p;
if (eliminando == inizio)
{
/*
for(p = inizio; p->successivo != inizio; p = p->successivo)
;
*/
inizio = eliminando->successivo;
/*p->successivo = inizio;*/
}
else
{
for(p=inizio; (p!= NULL) && (p->successivo != eliminando);p = p->successivo)
;
if ( p == NULL)
{
printf("elimina: Errrore: non c'e' l' elemento cercato nella lista \n");
return;
}
p->successivo = p->successivo->successivo;
}
free(eliminando);
}
void scrivi_lista(Listanomi *elemento)
{
Listanomi *p;
int count=0;
/*for(p=inizio; (p!= NULL) && (p->successivo != elemento);p = p->successivo)
;
if(p == NULL)
{
printf("Elemtno non trovato \n");
return;
}*/
if(inizio == NULL) printf("lista vuota\n");
else {
p = inizio; /*questa riga va tolta*/
do{count++;
printf("%s\n",p->nome);
p= p->successivo;
}
while(p != NULL); /*va sostituito con while(p != elemento);*/
}
printf("%d elementi\n",count);
return;
}
Listanomi *trova_nome char *nome )
{
Listanomi *p;
p=inizio;
do{
if(strcmp(nome,p->nome)==0) return p;
}while((p=p->successivo) != NULL); /*va sostituito con }while((p=p->successivo) != inizio);*/
return NULL;
}
|
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
fabiannit: hai la firma irregolare, deve max 3 righe @800x600... La tua è 5 rughe...ti prego di correggere... Grazie
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 02:46.



















