Gentilissimo e velocissimo...thanks .......scusami ma continuo ad approfittare della tua disponibilità per un ultima volta...ho aggiunto 3 funzioni al codice...che poi fondamentalmente sono quelle che mi interessano alla lista...cioe stampa, elimina elemento ed inserisci in coda, ma mi danno errori che proprio non riesco a risolvere, credo siano errori nel non saper maneggiare benissimo i puntatori quando chiamo le variabili...se puoi dargli un ultima occhiata te ne sono grato....ps: ho rivisto un po di errori sui puntatori, viene compilato ma la funzione di ricerca find e quella di elimina elemento non riesco a farle funzionare correttamente lista
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef char N[80];
using namespace std;
class Parola
{
public:
N Nome;
int nu;
Parola() { } ; // anche se non c'è alcuna istruzione, devi comunque definire una funzione undefined reference to `Parola::Parola()'
Parola(N n, int num) {
strncpy(Nome,n,80);
nu=num; // strncpy() e' più sicura di strcpy()
}
void setN(N num, int nume){strncpy(Nome,num,80);
nu=nume;
} ;
char* getN(){ return Nome; } ;
int getnu(){ return nu;}; //le funzioni ritornano puntatori e valori, ma non array error: 'getN' declared as function returning an array
};
struct LISTA_PAR
{
Parola elem;
LISTA_PAR* next; // ti sei dimenticato di cambiare nome - error: 'LISTA_NUM' does not name a type
};
class LISTA
{
private:
LISTA_PAR* n;
public:
LISTA(){ n=NULL; };
LISTA(Parola num){ //ti sei dimenticato di cambiare tipo di dato error: expected ')' before 'num'
n=new LISTA_PAR;
n->elem= num;
n->next= NULL;
}
Parola getFirst(){ return n->elem; }
void deleteFirst(){
LISTA_PAR* t= n;
n=n->next;
delete t;
};
void addFirst(Parola num){
LISTA_PAR* t= n;
n=new LISTA_PAR;
n->elem= num;
n->next= t;
}
void addcoda(Parola num) {
LISTA_PAR* t;
/* caso lista inizialmente vuota */
if(n==NULL){
n=new LISTA_PAR;
n->elem= num;
n->next= NULL;
}
/* caso lista con almeno un elemento */
t= n;
/* vado avanti fino alla fine della lista */
while(t->next!=NULL)
t=t->next;
/* qui t punta all'ultima struttura della lista: ne
creo una nuova e sposto il puntatore in avanti */
t->next=new LISTA_PAR;
t=t->next;
/* metto i valori nell'ultima struttura */
t->elem=num;
t->next=NULL;
};
void StampaLista() {
LISTA_PAR* t;
t=n;
while(t!=NULL) {
cout<<t->elem.Nome<<endl;
t=t->next;
}
printf("\n");
}
bool find(const N e)const{
bool trovato=false;
LISTA_PAR* t=n;
while (t && !trovato) {
if (strncmp(t->elem.Nome,e,80)==0) {
trovato=true;
cout<<"trovato"<<endl;
}else {
t=t->next;
}
}
return trovato;
};
bool findposition(const N e,LISTA_PAR * pos)const{
bool trovato=false;
LISTA_PAR* t=n;
while (t && !trovato) {
if (strncmp(t->elem.Nome,e,80)) {
trovato=true;
pos=t;
}else {
t=t->next;
pos=t;
}
}
return trovato;
};
bool elimina_dato(const N e){
LISTA_PAR* t=n;
if (findposition(e, t)) {
LISTA_PAR* temp1=t->next;
strcpy(t->next->elem.Nome,"");
t->next=t->next->next;
delete temp1;
return true;
}else {
return false;
}
};
int main()
{
LISTA l;
Parola n;
n.setN("A", 3);
l.addFirst(n);
n.setN("fjjf",5);
l.addcoda(n);
n.setN("cdd",5);
l.addcoda(n);
n.setN("dfdg",6);
l.addcoda(n);
n.setN("defe",7);
l.addcoda(n);
l.find("ff");
Parola nr; // dimenticato dinuovo di cambiare nome 'NUMERO' was not declared in this scope
l.StampaLista();
l.elimina_dato("ff");
l.StampaLista();
l.find("ff");
return 0;
}