Il forum per tutti i developer. Leggere attentamente il regolamento di sezione prima di postare.
da mirax93 » mar ott 19, 2010 8:56 pm
Vi spiego in breve il problema, ho una pila di puntatori in cui carico inizialmente gli elementi in testa, poi elimino il primo (questo per un esercizio di scuola), alla fine voglio far inserire un numero che deve andare a mettersi nella posizione esatta, per esempio ho gli elementi 90-80 e inserisco 85, quindi dovrò avere 90-85-80. Di seguito c'è il testo del programma, l'unica cosa che non funziona è la parte dell'inserimento ordinato di un numero aggiuntivo
- Codice: Seleziona tutto
#include<iostream>
using namespace std;
struct nodo{
int info;
nodo*next;
};
struct pila{
nodo*testa;
};
void crea(pila &);
void carica(pila &,nodo *);
void visual(pila);
void estrai(pila &);
bool test(pila);
void inserisci(pila &,nodo *);
int main(){
nodo *n;
pila s;
crea(s);
for(int i=1;i<=10;i++){
n=new nodo;
n->info=i*10;
n->next=NULL;
carica(s,n);
}
visual(s);
system("pause");
system("cls");
estrai(s);
visual(s);
system("pause");
system("cls");
int k=1,t;
while(k!=0){
cout<<"inserisci numero: ";
cin>>t;
n=new nodo;
n->info=t;
n->next=NULL;
inserisci(s,n);
visual(s);
cout<<"inserisci 1 per continuare, 0 per uscire"<<endl;
cin>>k;
}
visual(s);
system("pause");
return 0;
}
void crea(pila &s){
s.testa=NULL;
}
void carica(pila &s,nodo *n){
nodo *temp;
if(!test(s)){
temp=s.testa;
s.testa=n;
s.testa->next=temp;
}
else
s.testa=n;
}
bool test(pila s){
return(s.testa==NULL);
}
void estrai(pila &s){
nodo *temp=s.testa;
s.testa=s.testa->next;
delete temp;
}
void visual(pila s){
while(s.testa!=NULL){
cout<<s.testa->info<<endl;
s.testa=s.testa->next;
}
}
void inserisci(pila &s,nodo *n){
nodo *temp=s.testa,*p,*l;
while(temp->info>n->info&&temp!=NULL){
if(temp->info<n->info){
p=temp;
temp=n;
temp->next=p;
}
else
temp=temp->next;
}
}
Edit by Xero: ho aggiunto il tag CODE al codice, mantiene l'indentatura e migliora la leggibilità. Ti invito a farlo anche in futuro
-

mirax93
- Aficionado

-
- Messaggi: 25
- Iscritto il: gio lug 29, 2010 7:25 am
da mirax93 » ven ott 22, 2010 12:08 pm
ma nessuno ha risposto? Vabbè, non fa niente alla fine ho trovato la soluzione e la posto in modo che se vi serve la potete vedere
- Codice: Seleziona tutto
#include<iostream>
using namespace std;
struct nodo{
int info;
nodo*next;
};
struct pila{
nodo*testa;
};
void crea(pila &);
void carica(pila &,nodo *);
void inscoda(pila &,nodo *);
void visual(pila);
void estrai(pila &);
bool test(pila);
void inserisci(pila &,nodo *);
int main(){
nodo *n;
pila s;
crea(s);
for(int i=1;i<=10;i++){
n=new nodo;
n->info=i*10;
n->next=NULL;
carica(s,n);
}
visual(s);
system("pause");
system("cls");
estrai(s);
visual(s);
system("pause");
system("cls");
int k=1,t;
while(k!=0){
cout<<"inserisci numero: ";
cin>>t;
n=new nodo;
n->info=t;
n->next=NULL;
inserisci(s,n);
visual(s);
cout<<"inserisci 1 per continuare, 0 per uscire"<<endl;
cin>>k;
}
visual(s);
system("pause");
return 0;
}
void crea(pila &s){
s.testa=NULL;
}
void carica(pila &s,nodo *n){
nodo *temp;
if(!test(s)){
temp=s.testa;
s.testa=n;
s.testa->next=temp;
}
else
s.testa=n;
}
bool test(pila s){
return(s.testa==NULL);
}
void estrai(pila &s){
nodo *temp=s.testa;
s.testa=s.testa->next;
delete temp;
}
void visual(pila s){
while(s.testa!=NULL){
cout<<s.testa->info<<endl;
s.testa=s.testa->next;
}
}
void inserisci(pila &s,nodo *n){
nodo *temp=s.testa,*p,*l;
if(s.testa->info>n->info){
while(temp->next!=NULL&&temp->next->info>n->info)
temp=temp->next;
if(temp->next!=NULL){
n->next=temp->next;
temp->next=n;
}
else
inscoda(s,n);
}
else
carica(s,n);
}
void inscoda(pila &s,nodo*n){
nodo *temp=s.testa;
while(temp->next!=NULL)
temp=temp->next;
temp->next=new nodo;
temp->next->info=n->info;
temp->next->next=n->next;
}
-

mirax93
- Aficionado

-
- Messaggi: 25
- Iscritto il: gio lug 29, 2010 7:25 am
Torna a Programmazione
Chi c’è in linea
Visitano il forum: Nessuno e 1 ospite