Advertisement
Paszta

Lista Dwukierunkowa

Jun 8th, 2019
137
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.21 KB | None | 0 0
  1. #include <iostream>
  2. #include <time.h>
  3. #include <stdio.h>
  4.  
  5. struct element {
  6. int data;
  7. element* next;
  8. element* prev;
  9. };
  10.  
  11. struct dlist {
  12. element* head;
  13. element* tail;
  14. int el_count;
  15. };
  16.  
  17. dlist create_empty_dlist();
  18. element* create_element(int n_d);
  19. void add_tail(int n_d, dlist &dl);
  20. void add_head(int n_d, dlist &dl);
  21. void add_position(int n_d, dlist &dl, int posit);
  22. void delete_head(dlist &dl);
  23. void delete_tail(dlist &dl);
  24. void delete_position(dlist &dl, int posit);
  25. void show_list(dlist dl);
  26. void delete_list(dlist &dl);
  27. void show_reversed(dlist dl);
  28.  
  29.  
  30. using namespace std;
  31.  
  32. int main()
  33. {
  34.     dlist dl = create_empty_dlist();
  35.     int wybor, posit;
  36.     cout << "Podaj pozycje:" << endl;
  37.     cin >> posit;
  38.     srand(time(NULL));
  39.     do{
  40.         cout << "Co chcesz zrobic?" << endl;
  41.         cout << "1. Dodac element na koniec listy" << endl;
  42.         cout << "2. Dodac element na poczatek listy" << endl;
  43.         cout << "3. Dodac element na pozycje" << endl;
  44.         cout << "4. Usunac z konca" << endl;
  45.         cout << "5. Usunac z poczatku" << endl;
  46.         cout << "6. Usunac z pozycji" << endl;
  47.         cout << "7. Usunac calosc" << endl;
  48.         cout << "8. Wyswietlic calosc" << endl;
  49.         cout << "9. Wyswietlic calosc od konca" << endl;
  50.         cout << "10. Juz nic nie chcesz" << endl;
  51.         cin >> wybor;
  52.         switch(wybor){
  53.     case 1: add_tail( rand(),dl); break;
  54.     case 2: add_head( rand(),dl); break;
  55.     case 3: add_position( rand(), dl, posit); break;
  56.     case 4: delete_tail(dl); break;
  57.     case 5: delete_head(dl); break;
  58.     case 6: delete_position(dl, posit); break;
  59.     case 7: delete_list(dl); break;
  60.     case 8: show_list(dl); break;
  61.     case 9: show_reversed(dl); break;
  62.     case 10: cout << " Zakonczyles program";  break;
  63.     default : cout <<" Zly numer, sprobuj jeszcze raz" << endl;
  64.         }
  65.  
  66.     }
  67.     while (wybor != 10);
  68.     return 0;
  69. }
  70.  
  71. dlist create_empty_dlist(){
  72. dlist dl;
  73. dl.head = nullptr;
  74. dl.tail = nullptr;
  75. dl.el_count = 0;
  76. return dl;
  77. }
  78.  
  79. element* create_element(int n_d){ // nie dodaje, tworzy element
  80. element* n_e = new element;
  81. n_e -> data = n_d;
  82. n_e -> next = nullptr;
  83. n_e -> prev = nullptr;
  84. return n_e;
  85. }
  86.  
  87. void add_tail(int n_d, dlist &dl){
  88. element* n_e = create_element(n_d);
  89. cout << "Numer ktory zostanie dodany: " << n_d << endl;
  90. if (dl.el_count == 0)
  91.     dl.head = n_e;
  92. else{
  93.     dl.tail -> next = n_e;
  94.     n_e -> prev = dl.tail;
  95.     }
  96. dl.tail = n_e;
  97. dl.el_count ++;
  98. }
  99.  
  100. void add_head(int n_d, dlist &dl){
  101. element* n_e = create_element(n_d);
  102. cout << "Numer ktory zostanie dodany: " << n_d << endl;
  103. if (dl.el_count == 0)
  104.     dl.tail = n_e;
  105. else{
  106.     dl.head -> prev = n_e;
  107.     n_e -> next = dl.head;
  108.     }
  109. dl.head = n_e;
  110. dl.el_count ++;
  111. }
  112.  
  113. element* find_position(dlist dl, int posit){
  114.  
  115. if (posit < 0 or posit > dl.el_count-1)
  116.     return nullptr;
  117.  
  118. element* temp = dl.head;
  119. for (int i =0; i < posit; i++)
  120.     temp = temp -> next;
  121. return temp;
  122. }
  123.  
  124. void add_position(int n_d, dlist &dl, int posit){
  125. cout << "Numer ktory zostanie dodany: " << n_d << endl;
  126. if (posit < 1 or posit > dl.el_count){
  127.     cout << " Niewlasciwa pozycja" << endl;
  128.     return;
  129. }
  130. if (posit == 1)
  131.     {
  132.     add_head(n_d, dl);
  133.     return;
  134.     }
  135. if( posit == dl.el_count)
  136.     {
  137.     add_tail(n_d, dl);
  138.     return;
  139.     }
  140. element* temp = dl.head;
  141. for(int i=0; i < posit -1; i++)
  142.     temp = temp -> next;
  143. element* n_e = new element;
  144. n_e -> data = n_d;
  145. n_e -> next = temp -> next;
  146. temp -> next = n_e;
  147. dl.el_count ++;
  148. }
  149.  
  150. void delete_head(dlist &dl){
  151. if (dl.el_count == 0)
  152.     {
  153.     cout << "Dwulista jest pusta" << endl;
  154.     return;
  155.     }
  156. else{
  157. element* temp = dl.head;
  158. if(dl.el_count == 1)
  159.     {
  160.     dl.head = nullptr;
  161.     dl.tail = nullptr;
  162.     }
  163. else
  164.     {
  165.     dl.head = dl.head -> next;
  166.     dl.head -> prev = nullptr;
  167.     }
  168. delete temp;
  169. dl.el_count --;
  170. }
  171. }
  172.  
  173. void delete_tail(dlist &dl){
  174.  
  175. if (dl.el_count == 0)
  176.     {
  177.     cout << " Dwulista jest pusta " << endl;
  178.     return;
  179.     }
  180. else{
  181. element* temp = dl.tail;
  182. if (dl.el_count == 1)
  183.     {
  184.     dl.tail = nullptr;
  185.     dl.head = nullptr;
  186.     }
  187. else
  188.     {
  189.     dl.tail = dl.tail -> prev;
  190.     dl.tail -> next = nullptr;
  191.     }
  192. delete temp;
  193. dl.el_count --;
  194. }
  195. }
  196.  
  197. void delete_position(dlist &dl, int posit){
  198. if (posit < 1 or posit > dl.el_count)
  199.         {
  200.             cout << "Podano niewlasciwa pozycje" << endl;
  201.         return;
  202.         }
  203. if (posit == 1)
  204.     {
  205.     delete_head(dl);
  206.     return;
  207.     }
  208. if(posit == dl.el_count)
  209.     {
  210.     delete_tail(dl);
  211.     return;
  212.     }
  213. element* temp = dl.head;
  214. for (int i =1; i< posit -1; i++)
  215.     {
  216.     temp = temp -> next;
  217.     }
  218. element* temp_delete = temp -> next;
  219. temp -> next = temp_delete -> next;
  220. delete temp_delete;
  221. dl.el_count --;
  222. }
  223.  
  224. void show_list(dlist dl){
  225.     element* temp = dl.head;
  226. while (temp)
  227.     {
  228.     cout << temp -> data << endl;
  229.     temp = temp -> next;
  230.     dl.el_count --;
  231.     }
  232. }
  233.  
  234. void delete_list(dlist &dl){
  235. while(dl.head != nullptr){
  236.     delete_head(dl);
  237. }
  238. cout << "Lista zostala usunieta" << endl;
  239. }
  240.  
  241. void show_reversed(dlist dl){
  242.     element* temp = dl.tail;
  243. while (temp)
  244.     {
  245.     cout << temp -> data << endl;
  246.     temp = temp -> prev;
  247.     dl.el_count --;
  248.     }
  249. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement