Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - cancellazione della testa come evitare di perdere tt la lista?
Forum - C/C++ - cancellazione della testa come evitare di perdere tt la lista?

Avatar
matteog (Normal User)
Pro


Messaggi: 149
Iscritto: 10/04/2009

Segnala al moderatore
Postato alle 21:15
Venerdì, 27/11/2009




Codice sorgente - presumibilmente C++

  1. #include "stdafx.h"
  2. # include <iostream>
  3. # include <cstdlib>
  4. # include<string.h>
  5. #include <stdio.h>
  6. # define max 50
  7. using namespace std;
  8. struct lista
  9. {
  10.                char info[max];
  11.                            char cognome[max];
  12.                            char classe[max];
  13.                            char nascita[max];
  14.                            int matricola;
  15.                lista * next;
  16. };
  17. typedef lista * p;
  18. int i=0;
  19. int vet[1];
  20. int menu();
  21. void cancella(p, char[max],int i,int m);
  22. void stampa(p);
  23. p crea(int n);
  24. p inserisci(p,p);
  25. void cerca(p);
  26. void cercacognome(p);
  27. void cercanascita(p);
  28. void cercaclasse(p);
  29. void cercamatricola(p);
  30. int main()
  31. {
  32.  int scelta;
  33.     char x[max];
  34.     p temp=NULL,l=NULL,f;
  35.         int m=0;
  36.     int n=0;
  37.         do
  38.     {
  39.         scelta=menu();
  40.         switch(scelta)
  41.         {
  42.  
  43.                 case 1:
  44.                                
  45.                                 n++;
  46.                                 temp=crea(n);
  47.                 l=inserisci(l,temp);
  48.                                 f=l;
  49.                 break;
  50.                 case 2: cout<<"la lista e' \n";
  51.                 stampa(l);
  52.                 cout<<"\n";
  53.                 break;
  54.                 case 3:cout<<"inserisci il nome da cancellare\n";
  55.                 cin>>x;
  56.                                 l=f;
  57.                 cancella(l,x,i,m);
  58.                                 break;
  59.                                 case 4:
  60.                                 cerca(l);
  61.                 break;
  62.                                 case 5:
  63.                                 cercacognome(l);
  64.                                 break;
  65.                                 case 6:
  66.                                 cercaclasse(l);
  67.                                 break;
  68.                                 case 7:
  69.                                 cercanascita(l);
  70.                 break;  
  71.                                 case 8:
  72.                                 cercamatricola(l);
  73.                                 break;
  74.                 }
  75.     }
  76.     while(scelta!=9);
  77.     system("pause");
  78. }
  79.  
  80.  
  81.  
  82. void cancella(p l,char x[],int i,int m)
  83. {
  84.           system("cls");
  85.           p temp=l;
  86.           if(l!=NULL)
  87.           {
  88.              
  89.               while(strcmp(l->info,x)!=0)
  90.               {      
  91.                                   temp=l;
  92.                                   l=l->next;
  93.                                  
  94.                    
  95.               }
  96.              
  97.               temp->next=l->next;
  98.                           delete l;
  99.                          
  100.            
  101.          }
  102.                  else
  103.                  {
  104.                          cout<<"errore"<<endl;
  105.                  }
  106. }




come posso evitare in fase di cancellazione che la lista venga persa nel caso in cui venga eliminato la testa della lista?


matteog
PM Quote
Avatar
HeDo (Founder Member)
Guru^2


Messaggi: 2763
Iscritto: 21/09/2007

Segnala al moderatore
Postato alle 21:52
Venerdì, 27/11/2009

per cancellare la testa basta ritornare come testa il secondo elemento e deallocare la testa iniziale.


Ingegnere Informatico
https://ldlagency.it
PM Quote