|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#41 |
|
Senior Member
Iscritto dal: Apr 2007
Messaggi: 381
|
è completo con tanto di stmapa della lista ma mi da errore dopo che ho inserito tutti gli elementi
Codice HTML:
#include <stdio.h> #include <stdlib.h> struct nodo{ int elem; struct nodo *next; }; typedef struct nodo L_ELEM; typedef struct nodo *listaPtr; listaPtr eliminaPrimo(listaPtr l, int k) { listaPtr prev,curr,tempPtr; if (k==l->elem){ tempPtr=l; l=l->next; free(tempPtr); return l; } else{ prev=l; curr=l->next; while ((curr!=NULL) && (curr->elem != k)){ prev=curr; curr=curr->next; } if (curr !=NULL){ tempPtr=curr; prev->next=curr->next; free(tempPtr); return l; } return l; }} void stampalista(listaPtr l) { if (l!=NULL) { printf("%d ",l->elem); stampalista(l->next); }} int main(){ listaPtr l; int n=0; int i=0; int k=0; int valore=0; scanf("%d", &n); for(i=0;i<n;i++){ listaPtr l=(listaPtr)malloc(sizeof(struct nodo)); scanf("%d", &valore); l->elem=valore; l=l->next; } scanf("%d", &k); stampalista(l); } |
|
|
|
|
|
#42 |
|
Senior Member
Iscritto dal: Oct 2001
Messaggi: 7906
|
Codice:
#include <stdio.h>
#include <stdlib.h>
typedef struct nodo{
int elem;
struct nodo *next;
}nodo_t;
//nodo_t listaPtr;
//typedef struct nodo L_ELEM;
//listaPtr eliminaPrimo(listaPtr l, int k)
//{
// listaPtr prev,curr,tempPtr;
// if (k==l->elem){
// tempPtr=l;
// l=l->next;
// free(tempPtr);
// return l;
// }
// else{
// prev=l;
// curr=l->next;
// while ((curr!=NULL) && (curr->elem != k)){
// prev=curr;
// curr=curr->next;
// }
// if (curr !=NULL){
// tempPtr=curr;
// prev->next=curr->next;
// free(tempPtr);
// return l;
// }
// return l;
//
// }}
void stampalista(nodo_t *l)
{
while (l != NULL)
{
printf("%d ",l->elem);
l=l->next;
//stampalista(l->next);
}
}
int main(){
nodo_t *listaPtr=NULL;
nodo_t *tmp;
int n=0;
int i=0;
int k=0;
int valore=0;
printf("Num elem \n");
scanf("%d", &n);
printf("elem sono %d\n", n);
for(i=0;i<n;i++){
tmp=(nodo_t*)malloc(sizeof(nodo_t));
printf("Elemento %d \n", i+1);
scanf("%d", &valore);
tmp->elem=valore;
tmp->next=listaPtr;
listaPtr=tmp;
}
//listaPtr->next=NULL;
//scanf("%d", &k);
stampalista(listaPtr);
return 0;
}
l'inserimento l'ho messo in testa hai notato i cambiamenti che ho fatto? la cosa fondamentale è l'inserimento del benedetto nodo temp, è lui che va allocato, non il puntatore alla testa poi ti ho cambiato la funziona stampalista, completamente sbagliata(sbagliando avevi fatto una sorta di ricorsione senza fine...e ricorsione sulle liste è sadomaso )nota come ti ho modificato la struttura e eliminato i tuoi typedef, la sintassi così è + corretta se hai domande e hai msn ne riparliamo li ps la funzione per l'elemento k riscrivila in base alla funzione stampa lista, modificando opportunamente il while e le operazioni della funzione |
|
|
|
|
|
#43 |
|
Senior Member
Iscritto dal: Apr 2007
Messaggi: 381
|
ti ringrazio ora me lo vedo per bene...
|
|
|
|
|
|
#44 |
|
Senior Member
Iscritto dal: Apr 2007
Messaggi: 381
|
cosa sono tutti quegli //// che hai messo?
ho provato a toglierli ma non funziona il programma |
|
|
|
|
|
#45 |
|
Senior Member
Iscritto dal: Oct 2001
Messaggi: 7906
|
se c'è un // all'inizio di una riga, vuol dire che è commentata è lo stesso di /* */ solo che non è ANSI c se togli i commenti il programma non funzia xk le righe lo mandano in crash(è codice che non funziona/fa altre cose) parti dal programma che ti ho postato e cancella tutte le righe commentate, sono cazzate(un pò tue un pò mie )
|
|
|
|
|
|
#46 |
|
Senior Member
Iscritto dal: Apr 2007
Messaggi: 381
|
li ho tolti ora sto modificando quello che dicevi spero sia solo quello
|
|
|
|
|
|
#47 |
|
Senior Member
Iscritto dal: Apr 2007
Messaggi: 381
|
mi sembra corretto tutto, dov'è l'errore?
p.s.ho tolto i printf non servono Codice HTML:
#include <stdio.h> #include <stdlib.h> typedef struct nodo{ int elem; struct nodo *next; }nodo_t; nodo_t listaPtr; typedef struct nodo L_ELEM; listPtr eliminaPrimo(listaPtr l, int k) { listaPtr prev,curr,tempPtr; if (k==l->elem){ tempPtr=l; l=l->next; free(tempPtr); return l; } else{ prev=l; curr=l->next; while ((curr!=NULL) && (curr->elem != k)){ prev=curr; curr=curr->next; } if (curr !=NULL){ tempPtr=curr; prev->next=curr->next; free(tempPtr); return l; } return l; }} void stampalista(nodo_t *l) { while (l != NULL) { printf("%d ",l->elem); l=l->next; stampalista(l->next); } } int main(){ nodo_t *listaPtr=NULL; nodo_t *tmp; int n=0; int i=0; int k=0; int valore=0; scanf("%d", &n); for(i=0;i<n;i++){ tmp=(nodo_t*)malloc(sizeof(nodo_t)); scanf("%d", &valore); tmp->elem=valore; tmp->next=listaPtr; listaPtr=tmp; } listaPtr->next=NULL; scanf("%d", &k); stampalista(listaPtr); system("PAUSE"); return 0; } |
|
|
|
|
|
#48 |
|
Senior Member
Iscritto dal: Oct 2001
Messaggi: 7906
|
@ andbin
che non sia detto che non so fare un adt di primo livello questo programmillo che ho fatto come esercizio dell'uni ha tra le sue funzioni le 2 che servono a xbubbax, anche se sono con un FIFO e l'estrazione è solo del primo elemento era per la gloria, scusate @ xbubbax Codice:
nodo_t listaPtr; typedef struct nodo L_ELEM; listaPtr->next=NULL; Codice:
listPtr eliminaPrimo(listaPtr l, int k) // NO! ci va nodo_t *l, int k
{
listaPtr prev,curr,tempPtr; // NO! ci va nodo_t *prev,*curr,*tempPtr
ariedit.... Codice:
stampalista(l->next); Ultima modifica di supermario : 31-05-2011 alle 12:30. |
|
|
|
|
|
#49 |
|
Senior Member
Iscritto dal: Apr 2007
Messaggi: 381
|
non funziona ancora mi dice sintax error before elminaPrimo
e altre cosette |
|
|
|
|
|
#50 |
|
Senior Member
Iscritto dal: Oct 2001
Messaggi: 7906
|
tagliamo la testa al toro
Codice:
#include <stdio.h>
#include <stdlib.h>
typedef struct nodo{
int elem;
struct nodo *next;
}nodo_t;
nodo_t *eliminaElem(nodo_t *l, int k)
{
nodo_t *prev,*curr,*tempPtr;
if (k==l->elem){
tempPtr=l;
l=l->next;
free(tempPtr);
return l;
}
else{
prev=l;
curr=l->next;
while ((curr!=NULL) && (curr->elem != k)){
prev=curr;
curr=curr->next;
}
if (curr !=NULL){
tempPtr=curr;
prev->next=curr->next;
free(tempPtr);
return l;
}
return l;
}}
void stampalista(nodo_t *l)
{
while (l != NULL)
{
printf("%d -> ",l->elem);
l=l->next;
}
}
int main(){
nodo_t *listaPtr=NULL;
nodo_t *tmp;
int n=0;
int i=0;
int k=0;
int valore=0;
scanf("%d", &n);
for(i=0;i<n;i++){
tmp=(nodo_t*)malloc(sizeof(nodo_t));
scanf("%d", &valore);
tmp->elem=valore;
tmp->next=listaPtr;
listaPtr=tmp;
}
scanf("%d", &k);
eliminaElem(listaPtr,k);
stampalista(listaPtr);
system("PAUSE");
return 0;
}
|
|
|
|
|
|
#51 |
|
Senior Member
Iscritto dal: Apr 2007
Messaggi: 381
|
funziona grazieee
|
|
|
|
|
|
#52 |
|
Senior Member
Iscritto dal: Oct 2001
Messaggi: 7906
|
10 eurozzi su postepay
|
|
|
|
|
|
#53 |
|
Senior Member
Iscritto dal: Apr 2007
Messaggi: 381
|
ahahaha
comq ho fatto un esercizio simile però che deve eliminare tutte le occorrenze di un numero all'interno di una lista, ma invece di stampare i numeri che deve elminare stampa o 0, o il numero stesso o numeri enormi tipo 40232324.penso di non aver sbagliato niente visto che ho fatto quasi copia incolla per non stare a riscrivere tutto, al massimo c'è qualcosina all'interno della funzione però sembra ok Codice HTML:
#include <stdio.h> #include <stdlib.h> typedef struct nodo{ int elem; struct nodo *next; }listaPtr; listaPtr *eliminaTutti(listaPtr *l, int k){ listaPtr *prev,*curr,*tempPtr; prev=l; curr=l->next; while(curr!=NULL){ if(curr->elem!=k){ curr=curr->next;}else{ tempPtr=curr; curr=curr->next; free(tempPtr);}} return l;} void stampalista(listaPtr *l) { while (l != NULL) { printf("%d ",l->elem); l=l->next; } } int main(){ listaPtr *listaPtrdue=NULL; listaPtr *tmp; int n=0; int i=0; int k=0; int valore=0; scanf("%d", &n); for(i=0;i<n;i++){ tmp=(listaPtr*)malloc(sizeof(listaPtr)); scanf("%d", &valore); tmp->elem=valore; tmp->next=listaPtrdue; listaPtrdue=tmp; } scanf("%d", &k); eliminaTutti(listaPtrdue,k); printf("\n"); stampalista(listaPtrdue); system("PAUSE"); return 0; } |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 11:35.











)








