Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- using namespace std;
- /*
- Scopo :
- Inserire in modo ordinato elementi in una linked list
- Specifiche:
- void addNodoOrdinato(nodo *head,int n)
- void addNodoOrdinatoRicorsivo(nodo *nodoDaCercare,int n)
- Lista dei parametri:
- nodo *head | puntatore alla testa della lista
- int n | Elemento da inserire
- Indicatori di errore
- Nessuno
- Procedure ausiliarie
- void display(nodo *head) { //funzione di stampa dei dati
- Esempio d'uso:
- addNodoOrdinato(head,0);
- addNodoOrdinato(head,-12);
- addNodoOrdinato(head,288);
- addNodoOrdinato(head,14);
- addNodoOrdinatoRicorsivo(head,44);
- addNodoOrdinatoRicorsivo(head,9);
- addNodoOrdinatoRicorsivo(head,54);
- addNodoOrdinatoRicorsivo(head,-4);
- addNodoOrdinatoRicorsivo(head,2);
- OUTPUT: -12 -4 0 2 9 14 44 54 288
- */
- struct nodo{
- int info;
- nodo *link;
- };
- void addNodoOrdinato(nodo *head,int n) {
- nodo *newNode = new nodo();
- nodo *previous = NULL;
- nodo *current = head;
- while (current != NULL && n > current->info) {
- previous = current;
- current = current->link;
- }
- if (previous == NULL) { //Se l'elemento da inserire Γ¨ piΓΉ piccolo della head
- nodo *newNode2 = new nodo(); //creo un nodo
- newNode2->info = head->info; //copio il valore di head in questo nuovo nodo
- head->info = n; //valorizzo la testa col nuovo valore
- head->link = newNode2; //collego la testa al nuovo nodo
- } else {
- previous->link = newNode;
- }
- newNode->link = current;
- newNode->info = n;
- }
- void addNodoOrdinatoRicorsivo(nodo *nodoDaCercare,int n){
- nodo *newNode = new nodo();
- nodo *nodoAttuale = new nodo();
- nodoAttuale=nodoDaCercare;
- if(n>nodoDaCercare->info){
- if(nodoDaCercare->link!=NULL){
- addNodoOrdinatoRicorsivo(nodoDaCercare->link,n);
- }else{
- newNode->info=n;
- newNode->link=NULL;
- nodoDaCercare->link=newNode;
- }
- }else{
- nodoDaCercare = nodoDaCercare->link;
- newNode->info = nodoAttuale->info; //mi salvo il valore del nodoAttuale in nuovo nodo
- newNode->link = nodoDaCercare;
- nodoAttuale->link = newNode; //e modifico il nodoAttuale con i dati da inserire
- nodoAttuale->info = n;
- }
- }
- void display(nodo *head) { //funzione di stampa dei dati
- nodo *list = head;
- cout << list->info << " ";
- do{
- list = list->link;
- cout << list->info << " ";
- }while(list->link != NULL);
- cout<<endl;
- }
- int main(int argc, const char * argv[]) {
- nodo *head= new nodo();
- addNodoOrdinato(head,0);
- addNodoOrdinato(head,-12);
- addNodoOrdinato(head,288);
- addNodoOrdinato(head,14);
- addNodoOrdinatoRicorsivo(head,44);
- addNodoOrdinatoRicorsivo(head,9);
- addNodoOrdinatoRicorsivo(head,54);
- addNodoOrdinatoRicorsivo(head,-4);
- addNodoOrdinatoRicorsivo(head,2);
- display(head);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement