15-12-2009, 19:16
|
#9
|
Senior Member
Iscritto dal: Feb 2007
Messaggi: 1352
|
Quote:
Originariamente inviato da BlackAuron
Codice PHP:
#include<stdio.h>
#include<stdlib.h>
struct lis {
int inf;
struct lis *pun;
};
struct lis *genLista();
void stampaLista(struct lis *);
struct lis *cancNum(struct lis *);
int main() {
struct lis *puntalista;
puntalista = genLista();
stampaLista(puntalista);
puntalista = cancNum(puntalista);
stampaLista(puntalista);
return (0);
}
struct lis *genLista() {
struct lis *p, *paus;
int n, i;
// Allochi lo spazio di struct lis e lo casti come puntatore ... le due
// dimensioni sono differenti. Tra l'altro, il cast nel C non è necessario
p = malloc(sizeof (struct lis));
printf("\nInserisci numero elementi lista : ");
scanf("%d", &n);
printf("\nInserisci 1o elemento : ");
scanf("%d", &p->inf);
paus = p;
for (i = 2; i <= n; i++) {
//stesso discorso di prima. Allochi patate e casti pere.
paus->pun = malloc(sizeof (struct lis));
paus = paus->pun;
printf("\nInserisci %do elemento: ", i);
scanf("%d", &paus->inf);
}
paus->pun = NULL;
return (p);
}
void stampaLista(struct lis *p) {
printf("\nLA LISTA E' :\n");
while (p) {
printf("%d", p->inf);
printf("-->");
p = p->pun;
}
printf("FINE LISTA");
printf("\n\n");
}
struct lis *cancNum(struct lis *p) {
struct lis *paus = NULL,*tmp,*head = NULL;
while(p){
if(!(p->inf % 2)){
tmp = p->pun;
free(p);
p = tmp;
}
else{
if(!head )
head = p;
else
paus->pun = p;
paus = p;
p = p->pun;
}
}
if(paus)
paus->pun = NULL;
return (head);
}
Non è la soluzione ottima, ma funziona  teoricamente si potrebbe fare a meno della variabile paus, e andare direttamente ad eliminare i successori di p.
|
si bhè ma il mio prof credo gli basti come l'ho fatto io, d'altronde non voglio diventare programmatore è solo un esame...mi diresti come fare il free giusto per il mio programma? grazie
__________________
Ho venduto a : truedocman2004,ragen-fio
Ho acquistato da :shinakuma, britt-one
|
|
|