Jak usunąć elementy z listy jednokierunkowej ?

0

Witam, mam za zadanie zrobic program wykorzystujący liste jednokierunkowa, program ma byc umieszczony w menu. Jedną z opcji programu ma byc usunięcie wybranego elementu z listy oraz usunięcie Od razu calej listy, jak to zrobic ? Kompletnie nie wiem jak zabrac sie do usuwania calej listy.. :( Do usuwania wybranego elementu napisalem cos takiego, chyba brakuje mi jeszcze usuwania na koncu, moglby ktos podpowiedziec lub dopisac jak to zrobic ? I jeszcze usuwanie całej listy na raz.

 cout<<"na ktorej pozycji chcesz usunac element (0=poczatek)";
int ktory; cin>>ktory; cin.ignore();
//na pocztatku:
     if(ktory==0)
     { tmp=glowa;
       glowa=glowa->wsk;
       delete tmp; 
       ile_elem--;  //zmniejszamy stan elementow na liscie 
     }
//w srodku     
element *tmp2=NULL;
int pozycja=1;
if( (0<ktory)&& (ktory<ile_elem) )
     {tmp=glowa;
      while(pozycja<ktory-1   )
             { tmp=tmp->wsk; 
               pozycja++;
             }
      tmp2=tmp->wsk;
      tmp->wsk=tmp2->wsk;
      delete tmp2;
     } 
0

Fragment kodu bez podania deklaracji listy i sposobu przekazania parametru, żartujesz sobie?
Usuwanie całej to usuwanie pierwszego dopóki jakieś są.

0

To mój cały kod

#include <cstdlib>
#include <iostream>
#include <string>
using namespace std;

   struct element
           {int liczba;
            element *wsk;  
           };

   int wypisz_liste(element *glowa)  //na wejsciu glowa-wskaznik do poczatku listy, na wyjsciu-ilosc elem w liscie
 {  int ile_elem=0;
    element *tmp=NULL;
    tmp=glowa;
    while(tmp->wsk!=NULL)

    {   std::cout<<"\t"<<tmp->liczba<<" ma adres: "<<tmp<<"\n";
      tmp=tmp->wsk; 
       ile_elem++;
   }
std::cout<<"\t"<<tmp->liczba<<" ma adres: "<<tmp<<"\n";  
}

int main()
{
int wybor;
cout<<"------------MENU--------------\n\n"<<endl;
cout<<"1- Generuj liste jednokierunkowa."<<endl; //gotowe
cout<<"2- Wpisz recznie elementy do listy."<<endl; //gotowe
cout<<"3- Dodaj elementy do istniejacej listy."<<endl; //(uwaga-lista musi istnieć-inaczej wyswietl komunikat że błšd ) i wróc do menu
cout<<"4- Usun wybrany element z listy."<<endl; //gotowe
cout<<"5- Usun cała liste."<<endl;
cout<<"6- Wypisz liste."<<endl; //???
cout<<"7- Zakoncz program."<<endl;//gotowe

    bool wypisz=true;

   element *tmp=NULL;
   element *glowa=NULL;
   element *nowy=NULL;
   char odp='t';  int ile=5, liczb;

cin>>wybor;
int ile_elem=0;

//==========================================================================

switch(wybor)
 {

    case 1: 

        {

    cout<<"ile elementow na liscie: "; int ile; cin>>ile;
   srand(time(0));  int los, zakres=50; 
   for(int i=1;i<=ile; i++ )
     { los=rand()%zakres;
       cout<<"element "<<i<<" = "<<endl; cin>>los;
       nowy= new element;  
       nowy->liczba=los; 
       nowy->wsk=NULL;       

       if(glowa==NULL)    
             glowa=nowy;   
       else 
           {
           tmp=glowa;
           while(tmp->wsk!=NULL)  
                tmp=tmp->wsk;
           tmp->wsk=nowy;
           }    
      }

        break;}

//-----------------------------------------------------------------

    case 2:
        {

      while ( (odp=='t')||(odp=='T') )
    { cout<<"czy dodac element do listy? t/n "<<endl;
      cin>>odp;   if (odp!='t') break;
      wypisz=true;
      nowy=new element;
      nowy->wsk=NULL;
      cout<<"podaj liczbe :"; cin>>liczb;
      nowy->liczba=liczb;
      if(glowa==NULL)
          glowa=nowy;
      else 
       { tmp=glowa;
         while(tmp->wsk!=NULL)
             tmp=tmp->wsk; 
         tmp->wsk=nowy;     
       }   
    tmp=glowa;

    } 

            break;}

//------------------------------------------------------------

    case 3:
        {

            cout<<"na ktorej pozycji chcesz dodac element (0=poczatek)";
int ktory; cin>>ktory; cin.ignore();              
//---tworzymy element
   nowy=new element;  //tworzy nowy element listy i ustawia na nim wskaznik nowy
   nowy->wsk=NULL;
   cout<<"podaj liczbe :"; cin>>liczb;
   nowy->liczba=liczb;
//---------------i dodajemy na wybranej pozycji
if(ktory==0)  //na 1. pozycji-na poczatku listy
   { nowy->wsk=glowa;
     glowa=nowy;  
   }
if( (0<ktory)&& (ktory<ile_elem) )//dodajemy w srodku
     {tmp=glowa;
      while(ktory<ile_elem) 
          tmp=tmp->wsk;
     }
if(ktory=ile_elem)
    {tmp=glowa;
       while(ktory!=ile_elem)
         tmp=tmp->wsk;
    }
        else
        if(glowa==NULL)
cout<<"BRAK UTWORZONEJ LISTY! Najpierw ja wygeneruj!"<<endl;

            break;}

  //---------------------------------------------------

    case 4:
        {
            cout<<"na ktorej pozycji chcesz usunac element (0=poczatek)";
int ktory; cin>>ktory; cin.ignore();
//na pocztatku:
     if(ktory==0)
     { tmp=glowa;
       glowa=glowa->wsk;
       delete tmp; 
       ile_elem--;  //zmniejszamy stan elementow na liscie 
     }
//w srodku     
element *tmp2=NULL;
int pozycja=1;
if( (0<ktory)&& (ktory<ile_elem) )
     {tmp=glowa;
      while(pozycja<ktory-1   )
             { tmp=tmp->wsk; 
               pozycja++;
             }
      tmp2=tmp->wsk;
      tmp->wsk=tmp2->wsk;
      delete tmp2;
     }
            break;}

  //------------------------------------------------- 

    case 5:
        {

            break;}

 //------------------------------------------------           

    case 6:

        {
         cout<<"\n KOLEJKA: "<<endl;  //--------wypisujemy kolejkę od pierwszego elementu:
int ile_elem_na_liscie=0;
if(wypisz)
{
while(tmp->wsk!=NULL)
         {    cout<<"\t"<<tmp->liczba<<" ma adres: "<<tmp<<endl;
              tmp=tmp->wsk; 
              ile_elem_na_liscie++;  //liczy ile w sumie jest elem na liscie
         }
    cout<<tmp->liczba<<" ma adres: "<<tmp<<endl;  //wypisuje ostatni element kolejki
}
else cout<<"kolejka jest pusta \a\a"; 
    cout<<endl;

            break;}

//-------------------------------------------------

    case 7:
        {
            return EXIT_SUCCESS;

            break;}

}

        }
cin.get();  

 //======================================================================  

    system("PAUSE");
    return EXIT_SUCCESS;
}
3

Programowanie bez formatowania to jak chodzenie ze spodniami spuszczonymi na kostki.
Owszem da się ale po pierwsze nie wygodne, po drugie nieprzyzwoicie wygląda.
Natomiast uczenie się chodzić ze spodniami spuszczonymi na kostki kiedy jeszcze nie umie się chodzić normalne - z góry skazane na porażkę.

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0