Punto informatico Network
Login Esegui login | Non sei registrato? Iscriviti ora (è gratuito!)
Username: Password:
  • Annuncio Pubblicitario

Inerire un elemento in una pila c++

Il forum per tutti i developer. Leggere attentamente il regolamento di sezione prima di postare.

Inerire un elemento in una pila c++

Messaggioda 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 [^]
Avatar utente
mirax93
Aficionado
Aficionado
 
Messaggi: 25
Iscritto il: gio lug 29, 2010 7:25 am

Re: Inerire un elemento in una pila c++

Messaggioda 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;
}
       
Avatar utente
mirax93
Aficionado
Aficionado
 
Messaggi: 25
Iscritto il: gio lug 29, 2010 7:25 am


Torna a Programmazione

Chi c’è in linea

Visitano il forum: Nessuno e 6 ospiti

Powered by phpBB © 2002, 2005, 2007, 2008 phpBB Group
Traduzione Italiana phpBB.it

megalab.it: testata telematica quotidiana registrata al Tribunale di Cosenza n. 22/09 del 13.08.2009, editore Master New Media S.r.l.; © Copyright 2008 Master New Media S.r.l. a socio unico - P.I. 02947530784. GRUPPO EDIZIONI MASTER Spa Tutti i diritti sono riservati. Per la pubblicità: Master Advertising