|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Nov 2003
Città: Pordenone - Tarvisio
Messaggi: 2451
|
[C]Esercizio con Liste
Salve a tutti...
Devo fare un esercizio con le liste che consiste nel cancellare tutti i numeri pari della lista. In pratica se ho una lista di questo genere: 6 3 2 1 Deve risultare: 3 1 Il secondo consiste nel, date due liste, vedere se un elemento della lista 1 appartiene alla lista 2. Chi mi puo' aiutare? Primo: (nn ho proprio idea di dove partire per cancellare un elemento) Codice:
#include <stdio.h>
#include <malloc.h>
using namespace std;
struct nodo
{
int info;
nodo* next;
};
nodo* Crea_lista();
void Visualizza_lista(nodo*);
void Elimina(nodo*);
int main()
{
nodo* lista=NULL; //creo la lista
lista=Crea_lista();
Visualizza_lista(lista);
Elimina(lista);
Visualizza_lista(lista);
fflush(stdin);
getchar();
return 0;
}
nodo* Crea_lista()
{
nodo *p,*punt;
int i,n;
printf("\nNumero elementi lista: ");
scanf("%d",&n);
if(n==0)
{
p=NULL;
}
else
{
//inserimento del primo valore
p=(nodo*)malloc(sizeof(nodo));
printf("\nInserisci il primo valore");
scanf("%d",&p->info);
punt=p;
}
for(i=2;i<=n;i++)
{
punt->next=(nodo*)malloc(sizeof(nodo));
punt=punt->next; //scorri
printf("\nInserisci il %d elemento: ",i);
scanf("%d",&punt->info);
}
punt->next=NULL;
return p;
}
void Visualizza_lista(nodo* lista)
{
printf(" Lista---> ");
while(lista!=NULL)
{
printf("%d",lista->info);
printf(" ---> ");
lista=lista->next;
}
printf("NULL\n\n");
getchar();
}
void Elimina(nodo* lista)
{
nodo* scorri=lista;
printf("LOL");
while(scorri!=NULL)
{
if(scorri->info%2==0)
{
printf("Trovato elemento pari, eliminazione in corso");
scorri=scorri->next;
free(scorri);
lista->next=scorri->next;
}
scorri=scorri->next;
}
}
L'altro l'ho risolto cosi' (metto solo la funzione che confronta) Codice:
int Confronta(nodo* lista,nodo* lista2)
{
nodo* scorri1;
nodo* scorri2;
scorri1=lista;
scorri2=lista2;
while(scorri1!=NULL)
{
while(scorri2!=NULL)
{
if(scorri2->info==scorri1->info)
return scorri1->info;
scorri2=scorri2->next;
}
scorri1=scorri1->next;
}
return -1;
}
Grazie a chi mi vorrà aiutare
__________________
Me? The Chosen One? They chose me, and i didn't even graduate from fuckin' high school Wind FTTE Vula 100/20 - Stats Retelit / Valcanale 20Mbit/2Mbit // Wind 100/20+Wind4G con EdgerouterX |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Nov 2003
Città: Pordenone - Tarvisio
Messaggi: 2451
|
up
__________________
Me? The Chosen One? They chose me, and i didn't even graduate from fuckin' high school Wind FTTE Vula 100/20 - Stats Retelit / Valcanale 20Mbit/2Mbit // Wind 100/20+Wind4G con EdgerouterX |
|
|
|
|
|
#3 |
|
Member
Iscritto dal: Apr 2004
Messaggi: 130
|
Ma gli esercizi non dovresti farteli da solo?
Codice:
#include <stdio.h>
#include <stdlib.h>
typedef struct nodo {
int info;
struct nodo* next;
} nodo;
nodo* creaLista()
{
nodo *root = NULL, *corrente;
int i, n;
fputs("\nNumero elementi lista: ", stdout);
fflush(stdout);
scanf("%d", &n);
if (n > 0) {
corrente = root = malloc(sizeof(nodo));
fputs("\nInserisci il 1 elemento: ", stdout);
fflush(stdout);
scanf("%d", &corrente->info);
for(i = 1; i < n; i++) {
corrente->next = malloc(sizeof(nodo));
corrente = corrente->next;
printf("\nInserisci il %d elemento: ", i+1);
fflush(stdout);
scanf("%d", &corrente->info);
}
corrente->next = NULL;
}
return root;
}
void visualizzaLista(nodo* lista)
{
fputs("Lista: ", stdout);
for (; lista; lista = lista->next)
printf("(%d)-->", lista->info);
puts("(NULL)\n");
}
void eliminaNodiPari(nodo** lista)
{
nodo *corrente, *precedente;
while ((*lista)->info % 2 == 0) {
nodo *tmp = *lista;
*lista = (*lista)->next;
free(tmp);
}
precedente = *lista;
corrente = precedente->next;
while (corrente) {
if (corrente->info % 2 == 0) {
nodo *tmp = corrente;
precedente->next = corrente->next;
corrente = corrente->next;
free(tmp);
} else {
precedente = corrente;
corrente = corrente->next;
}
}
}
int main(void)
{
nodo *lista = creaLista();
visualizzaLista(lista);
eliminaNodiPari(&lista);
visualizzaLista(lista);
return 0;
}
Ultima modifica di Qu@ker : 24-10-2005 alle 20:09. |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 13:31.



















