Advertisement
Talar97

[AISD] Listy jednokierunkowe

Jan 30th, 2019
405
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.96 KB | None | 0 0
  1. #include <cstdlib>
  2. #include <iostream>
  3.  
  4. using namespace std;
  5.  
  6. struct elem{
  7.     int dane;
  8.     elem* nast;
  9. };
  10.  
  11. void insert(elem* &lista, int i, int x){    //Wrzucenie nowego elementu przed zadany, i-ty element.
  12.     elem* nowy = new elem;                  //Tworzenie nowego el
  13.     nowy->dane = x;                         //Przypisywanie wart. do el.
  14.     if(i==1){                               //Jezeli chcemy dodac jako pierwszy el.
  15.         nowy->nast = lista;
  16.         lista = nowy;
  17.     }
  18.     else if(i > 1){                         //Jezeli obiekt jest na dalszej pozycji, to musimy sprawdzic pare rzeczy
  19.         elem* tmp = lista;                  //Tu bedziemy zapisywac elementy pobrane w nastepnej petli
  20.         int j = 0;                          //Licznik do iterowania whila
  21.         while(j != (i-2)){                  //Idziemy do przodu po liscie do poki nie dojdziemy do i-2 elementu
  22.             tmp = tmp->nast;                //Zapisujemy tmp
  23.             j++;                            //zwiekszamy licznik
  24.             if(tmp == NULL) {cout << "Za krotka lista"; break; }
  25.         }
  26.         nowy->nast = tmp->nast;
  27.         tmp->nast = nowy;
  28.     }
  29.     else { cout << "Nieprawidlowa wartosc i"; }
  30. }
  31.  
  32. void remove(elem* &lista, int i){
  33.     if(lista != NULL){
  34.         if(i == 1){                         //Jezeli el. ktory chcemy usunac jest na pierwszej pozycji
  35.             elem* stary = lista;            //to sprawa prosta, lista to nastepny element listy
  36.             lista = lista->nast;            //stary usuwamy
  37.             delete stary;
  38.         }
  39.         else if(i > 1){                     //jezeli usuwany ob. jest gdzies dalej
  40.             elem* tmp = lista;              //tymczasowa zmienna do przechowywania tego po czym lecimy w liscie
  41.             int j = 0;                      //licznik
  42.             while(j != (i-2)){
  43.                 tmp = tmp->nast;            //przy kadzej iteracji bierzemy nastepny element
  44.                 j++;                        //zwiekszamy licznik
  45.                 if(tmp == NULL) {cout << "Za krotka lista"; break; }
  46.             }
  47.            
  48.             elem* stary = tmp->nast;
  49.             if(stary == NULL) { cout << "Nie ma co usuwac"; }
  50.             tmp->nast = stary->nast;
  51.             delete stary;
  52.            
  53.         }
  54.         else { cout << "Nieprawidlowa wartosc i"; }
  55.     }
  56. }
  57.  
  58. int read(elem* &lista, int i){
  59.     if(lista != NULL){
  60.         if(i >= 1){
  61.             elem* tmp = lista;
  62.             int j = 0;
  63.             while(j != (i-1)){
  64.                 tmp = tmp->nast;
  65.                 j++;
  66.                 if(tmp == NULL) { cout << "Za krotka lista"; break; }
  67.             }
  68.             return tmp->dane;
  69.         }
  70.     }
  71. }
  72.  
  73. int size(elem* &lista){
  74.     if(lista != NULL){
  75.         elem* tmp = lista;
  76.         int i = 0;
  77.         while(tmp != NULL){
  78.             tmp = tmp->nast;
  79.             i++;
  80.         }
  81.         return i;
  82.     }
  83. }
  84.  
  85. void wypiszDane(elem* &lista){
  86.     if(lista != NULL){
  87.         elem* tmp = lista;
  88.         while(tmp != NULL){
  89.             cout << tmp->dane << ", ";
  90.             tmp = tmp->nast;
  91.         }
  92.     }
  93.     else { cout << endl << "Lista nie istnieje"; }
  94. }
  95.  
  96. void removeList(elem* &lista){
  97.     if(lista != NULL){
  98.         while(lista != NULL){
  99.             elem* stary = lista;
  100.             lista = lista->nast;
  101.             delete stary;
  102.         }
  103.     }
  104. }
  105.  
  106. int main() {
  107.     elem* lista = NULL;
  108.    
  109.     insert(lista, 1, 5);    //5
  110.     insert(lista, 1, 10);   //10, 5
  111.     insert(lista, 1, 15);   //15, 10, 5
  112.     insert(lista, 3, 66);   //15, 10, 66, 5
  113.    
  114.     cout << "Lista: ";
  115.     wypiszDane(lista);
  116.    
  117.     remove(lista, 3);
  118.     cout << endl << "Po usunieciu 3 pozycji: ";
  119.     wypiszDane(lista);      //15, 10, 5
  120.    
  121.     cout << endl << "Drugi element listy: " << read(lista, 2);  //10
  122.    
  123.     cout << endl << "Wielkosc listy: " << size(lista); //3
  124.    
  125.     removeList(lista);
  126.     wypiszDane(lista);  //Lista nie istnieje
  127.  
  128.     return 0;
  129. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement