|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Apr 2002
Città: Vigevano(PV)
Messaggi: 2124
|
[C++]Liste
Ho il seguente cod:
Codice:
#include <iostream>
#include <cstdio>
using namespace std;
struct List
{
/*
* The list information
*/
int info;
/*
* The next list element
*/
List *next;
/*
* Create struct
* 1. The struct info
* 2. The next structure addres
*/
List(int Info, List *Next)
{
info = Info;
next = Next;
}
/*
* Add a element
* 1. A List pointer
* 2. A value of element
*/
void add(List *pr, int n)
{
if(pr == NULL){ /* first element */
pr->info = n;
pr->next = NULL;
}
/* another case */
List *p = pr;
while(p->next != NULL)
p = p->next;
p->next = new List(n, NULL);
}
/*
* Print all element
* 1. A List pointer
*/
void print(List *pr)
{
List *p = pr;
while(p->next != NULL){
cout << "Info = " << p->info <<"\n";
p = p->next;
}
}
/*
* Find a element
* 1. A List pointer
* 2. A index that you wont to find
*/
List *find(List *pr, int index)
{
List *p = pr;
while((p->next != NULL) && (p->info != index))
p = p->next;
return p;
}
void remove(List* pr, int n)
{
/*
List *p = ls;
while((p->next != NULL) && (p->info != n))
p = p->next;
delete p;
*/
}
/*
* Generate a list based.
* 1. a int array
* 2. a array lenght
*/
List* generate(List *pr, int parms[], int lenght)
{
for(register int i=0;i<lenght;i++){
pr->next = new List(parms[i], NULL);
}
}
};
int main()
{
List *p = new List(0, NULL);
int i = 0;
while( i != 10){
p->add(p, i);
i++;
}
p->print(p);
p->remove(p, 5);
p->print(p);
system("PAUSE");
return 0;
}
P.s: nomenclatura generale(var e funz) e inglese(commenti) vanno bene??? |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Consiglio...con la ricorsione si fa molto prima:
Codice:
void remove(List* &p, int n)
{
if(!p) return;
if(p->info == n)
{
List *tmp = p->next;
delete p;
p = tmp;
}
else
remove(p->next, n);
}
|
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Apr 2002
Città: Vigevano(PV)
Messaggi: 2124
|
per il p.s?
Tnk 1000 |
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Apr 2002
Città: Vigevano(PV)
Messaggi: 2124
|
altra domanda.
Perche mi da errore in questo modo??? Codice:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <string>
using namespace std;
struct List
{
/*
* The information index
*/
int index;
/*
* The information value
*/
void * data;
/*
* The next list element
*/
List * next;
/*
* Create struct
* 1. The struct index
* 2. The struct data
* 3. The next structure addres
*/
List(int Index, void * Data, List * Next)
{
data = Data;
index = Index;
next = Next;
}
/*
* Add a element
* 1. A List pointer
* 2. A index of element
* 3. The value of element
*/
void add(List * pr, int index, void * data)
{
if(pr == NULL){ /* first element */
pr->index = index;
pr->data = data;
pr->next = NULL;
}
/* another case */
List * p = pr;
while(p->next != NULL)
p = p->next;
p->next = new List(index, data, NULL);
}
/*
* Print all element
* 1. A List pointer
* 2. A mode
* 0 = wiew into a addres
* 1 = wiew into a string
*/
void print(List * pr, int mode=0)
{
List * p = pr;
while(p->next != NULL){
if(mode==0)
cout << "Info " << p->index <<" = " << p->data << "\n";
else if(mode==1)
cout << "Info " << p->index <<" = " << (char *) p->data << "\n";
p = p->next;
}
}
/*
* Find a element
* 1. A List pointer
* 2. A index that you wont to find
*/
List *find(List * pr, int index)
{
List * p = pr;
while((p->next != NULL) && (p->index != index))
p = p->next;
return p;
}
/*
* Remove a element
* 1. A List pointer
* 2. A index of element
*/
void remove(List * pr, int index)
{
List * p = pr;
if(!p) return;
if(p->index == index)
{
List * tmp = p->next;
delete p;
p = tmp;
}
else
remove(p->next, index);
}
/*
* Generate a list.
* 1. a array
* 2. a array lenght
*/
List* generate(List * pr, void * parms[], int lenght)
{
for(register int i=0; i<lenght; i++){
pr->next = new List(i, parms[i], NULL);
}
}
};
int main()
{
string * st = new string("ciao");
List * p = new List(0, st, NULL);
int i = 0;
while( i != 10){
p->add(p, i, (string *) st);
i++;
}
cout << "Prima\n";
p->print(p, 1);
p->remove(p, 5);
cout << "Dopo\n";
p->print(p, 1);
system("PAUSE");
return 0;
}
Ultima modifica di Luc@s : 09-10-2003 alle 17:25. |
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Apr 2002
Città: Vigevano(PV)
Messaggi: 2124
|
Il problema e che mi stampa 'indirizzi e nn i dati
Ultima modifica di Luc@s : 09-10-2003 alle 17:29. |
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Apr 2002
Città: Vigevano(PV)
Messaggi: 2124
|
Ed Ecco il ris
|
|
|
|
|
|
#7 |
|
Bannato
Iscritto dal: Mar 2002
Città: Pescara - 未婚・恋人なし Moto: Honda CBR 1000 RR Casco: XR1000 Diabolic 3
Messaggi: 27578
|
Ho visto che hai stampato gli indirizzi per cercare di renderti conto della situazione. Perchè non usi un debugger? Puoi ispezionare i singoli valori degli elementi nella struttura in cinque minuti e porre delle condizioni mentre costruisci la lista per accertarti che tutto vada per il verso giusto ...
|
|
|
|
|
|
#8 | |
|
Bannato
Iscritto dal: Nov 2002
Città: PV
Messaggi: 1210
|
Quote:
|
|
|
|
|
|
|
#9 |
|
Bannato
Iscritto dal: Mar 2002
Città: Pescara - 未婚・恋人なし Moto: Honda CBR 1000 RR Casco: XR1000 Diabolic 3
Messaggi: 27578
|
Codice:
void print(List * pr, int mode=0)
{
...
}
|
|
|
|
|
|
#10 |
|
Bannato
Iscritto dal: Nov 2002
Città: PV
Messaggi: 1210
|
ma l'idea delgi indirizzi i è sembrata stupida??
Come l'ho implementata sta lista, in generale??? |
|
|
|
|
|
#11 |
|
Senior Member
Iscritto dal: Apr 2002
Città: Vigevano(PV)
Messaggi: 2124
|
cmq con la tua correzione e acendo print(p) mi viene la roba in allegato
P.S: cosa dicevi x il debugger? |
|
|
|
|
|
#12 |
|
Bannato
Iscritto dal: Mar 2002
Città: Pescara - 未婚・恋人なし Moto: Honda CBR 1000 RR Casco: XR1000 Diabolic 3
Messaggi: 27578
|
La mia non era una correzione ... Ho semplicemente copiato e incollato il prototipo della funzione ...
Per il debugger dicevo che è uno strumento con cui vale "perdere" un po di tempo ... Questi problemi non derivano dalla capacità o meno di chi programma. Possono essere anche delle sviste fatte al volo al momento della codifica. Con un debugger come ad esempio gdb, puoi tracciare l'esecuzione del tuo proramma, controllare i valori che passi ad una funzione, ispezionare il contenuto di variabili o porre delle condizioni quando costruisci delle strutture di dati ... In sostanza questi problemi penso li abbiamo avuti tutti noi. Ma con un debugger correggerli sono 15 minuti di lavoro (e qualche diottria guadagnata |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 03:01.


















