Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //TWORZENIE.EXE
- //Wczytuj calkowite poki nie napiszesz 0, drukuj liste i usun.
- #include <iostream>
- using namespace std;
- struct SLista
- {
- int dane;
- SLista *next;
- };
- void stworzenie(SLista *&glowa)
- {
- SLista *akt, *ogon; //Deklaruje ogon i akt bo tylko tutaj bede tego uzywal.
- glowa=new SLista; //Tworzę nowy element typu SLista i głowa na niego wskazuje. [1]
- cout<<"Podawaj liczby calkowite, 0 konczy liste:"<<endl; // [1]
- cin>>glowa->dane; //Wpisuje w dane liczbe. [1]
- if(glowa->dane==0) //Warunek, jak w dane dam zero to wywala funkcje. [1]
- {
- cout<<"Koniec."; // [1]
- glowa->next=NULL; //Wskaznik glowa-next wskazuje na NULL, zeby wiadomo bylo ze to otatni element listy. [1]
- return; //Wywala do maina. [1]
- }
- akt=glowa; //Wskaznik akt wskazuje tam gdzie wskaznik glowa (czyli na glowe) i wejdziemy w petle. [2]
- while(akt->dane!=0) //Poki nie wpiszesz zero to: [2]
- {
- ogon=akt; //Wskaznik ogon wskazuje tam gdzie wskaznik akt (ogon wskazuje na przedostatni element gdy stworzymy akt). [2][5]
- akt=new SLista; //Tworze ostatni element mojej listy i wskazuje na niego akt. [3][6]
- cin>>akt->dane; //Wpisuje cos w pole dane w akt.[3][6]
- akt->next=NULL; //Wskaznik akt-next wskazuje na NULL. [3][6]
- ogon->next=akt; //Wskaznik ogon-next wskazuje na ostatni element (akt). [4][7]
- }
- }
- void drukuj(SLista *glowa) //tutaj nie mozna tego "&" bo wszystko na nic i po co zyc.
- {
- cout<<"Drukuje: "<<endl;
- while(glowa!=NULL)
- {
- cout<<glowa->dane<<'\t'; //[1]Wyswietla z 1. komorki. [2]Wyswietla dane z tego co wskazuje next z glowy (czyli nastepna komorka)
- glowa=glowa->next; //[1]Glowa staje sie nextem z glowy. [2]Przechodzi dalej.
- }
- }
- void usunall(SLista *&glowa)
- {
- SLista *tmp; //pomocnicza w ktorej beda elemnty od poczatku usuwane.
- while(glowa!=NULL)//poki nie dojdziemy do konca.
- {
- tmp=glowa; //[1]pomocnicza stanie sie 1. elementem. [2]Pomocnicza staje sie kolejnym elementem.(n)
- glowa=glowa->next; //[1]Glowa staje sie nextem z glowy. [2]Glowa staje sie kolejnym.(n+1)
- delete tmp; //[1]usuwamy 1. element. [2]Usuwamy tmp (n)
- }
- }
- void usunele(SLista *&glowa)
- {
- cout<<endl<<"Podaj nr. elemntu do usuniecia."<<endl;
- int licznik;
- cin>>licznik;
- SLista *tmp=glowa, *tmp2;
- if(licznik==1)
- {
- glowa=glowa->next;
- delete tmp;
- }
- else
- {
- while(licznik>2) //Ta petla po to zeby znalezc element przed usuwanym.
- {
- tmp2=tmp;
- tmp=tmp->next;
- licznik--;
- }
- tmp2=tmp->next; // W tmp bedzie element ktory mam usnac.
- tmp->next=tmp2->next; //Wskaznik wczesniejszgo od usunietego elementu wskazuje na nastpepny po usunietym.
- delete tmp2;
- }//Usuwam to co mam usunac, lol.
- }
- void dodaj(SLista *&glowa)
- {
- int licznik, y;
- cout<<endl<<"Gdzie chcesz cos dodac?"<<endl;
- cin>>licznik;
- cout<<endl<<"Co chcesz dodac?"<<endl;
- cin>>y;
- SLista *tmp=glowa,*tmp2;
- if(licznik==0)
- {
- tmp=new SLista;
- tmp->dane=y;
- tmp->next=glowa;
- glowa=tmp;
- }
- else
- {
- while(licznik>1)
- {
- tmp=tmp->next;
- licznik--;
- }
- tmp2=new SLista;
- tmp2->dane=y;
- tmp2->next=tmp->next;
- tmp->next=tmp2;
- }
- }
- int main()
- {
- SLista *glowa;
- stworzenie(glowa);
- drukuj(glowa);
- usunele(glowa);
- drukuj(glowa);
- dodaj(glowa);
- drukuj(glowa);
- usunall(glowa);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement