Salve mi scuso per il precedente post non conforme alle regole del forum ma sono giorni che lavoro a questo problema e non riesco a risolverlo!!!
Ho implementato un algoritmo per l'inserimento e la cancellazione di un nodo all'interno di una lista semplice ordinata
codice:
#include <stdio.h>
#include <stdlib.h>
struct nodo {
int elemento; //campo che contiene il valore
struct nodo* next; //campo che contiene il punt al prossimo nodo
};
//function che inserisce il nuovo nodo
struct nodo* Insert(struct nodo* lista, int elemento);
//function che stampa la lista per intero
void Stampa(struct nodo *lista);
// function che conta gli elementi
int contaC(struct nodo *lista);
//controllo che non ci siano doppioni
struct nodo * elimDoppi (struct nodo * lista);
int presente (int elemento, struct nodo * lista);
int main() {
//inizializzo la lista!!!
struct nodo* lista = NULL;
int totale=0;
lista = Insert(lista,9);
lista = Insert(lista,9);
lista = Insert(lista,31);
lista = Insert(lista,15);
lista = Insert(lista,1);
lista = Insert(lista,11);
lista = Insert(lista,15);
//stampo la lista con i doppioni!!!
printf("CON I DOPPIONI: \n "); Stampa(lista);
lista = elimDoppi (lista);
//conto quanti elementi ho nella lista!!!
totale=contaC(lista);
printf("\n\n NUMERO DEGLI ELEMENTI DELLA LISTA = %d. \n", totale);
//stampo la lista senza doppioni!!!
Stampa(lista);
getchar();
return(0);
}
struct nodo* Insert(struct nodo* lista, int elemento) {
struct nodo * nuovo= malloc(sizeof(struct nodo));
//alloco nuovo nodo
nuovo->elemento = elemento;
//gli assegno un determinato valore
if(lista==NULL) //lista nulla {
lista=nuovo;
nuovo->next=NULL;
} else {
struct nodo *q=lista;
if(nuovo->elemento < q->elemento) {
int appoggio=nuovo->elemento;
nuovo->elemento= q->elemento;
q->elemento=appoggio;
}
while(q->next != NULL && q->next->elemento < nuovo->elemento){
q=q->next;
}
if(q->next==NULL){
nuovo->next=NULL;
} else {
nuovo->next=q->next;
}
q->next=nuovo;
}
return(lista);
}
//voglio eliminare i doppioni
struct nodo * elimDoppi (struct nodo * lista) {
if (lista == NULL) {//LISTA VUOTA
return (NULL);
} else {
if (presente(lista->elemento, lista->next)){
return (elimDoppi(lista->next));
} else {//RICORSIONE
lista -> next = elimDoppi (lista -> next);
return (lista);
}
}
}
int presente (int elemento, struct nodo * lista) {
if (lista == NULL){ //LISTA VUOTA
return (0);
} else {
if (lista->elemento ==elemento){ //LISTA 1 ELEMENTO
return (1);
} else {
//RICORSIONE
return (presente (elemento, lista-> next));
}
}
}
//voglio contare quanti elementi ci sono in una lista
int contaC(struct nodo *lista) {
struct nodo* startlista = lista;
int totale=0;
while(startlista!=NULL)
{
startlista=startlista->next;
totale++;
}
return totale;
}
//FUNZIONE CHE STAMPA LA LISTA
void Stampa(struct nodo * lista) {
struct nodo * startlista= lista;
printf("LA LISTA E': \n ");
while(startlista!=NULL) {
printf("%d ; ", startlista->elemento);
startlista=startlista->next;
} printf("\n"); }
Ora vorrei creare una liste con due chiavi del tipo:
codice:
struct nodo{
int key[2];
struct nodo* next[2];
char * dato; };
struct NODO{
struct nodo subnodo[2];
char * dato; };
ma non so più come gestire la cosa!!!Qualcuno potrebbe aiutarmi???