Guest User

Untitled

a guest
Jan 16th, 2020
75
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.50 KB | None | 0 0
  1. #include <iostream>
  2. #include <iomanip>
  3.  
  4. using namespace std;
  5.  
  6. // Definicje typów
  7. //----------------
  8.  
  9. // Element listy
  10. //--------------
  11. struct dlistEl
  12. {
  13. dlistEl * next; // następnik
  14. dlistEl * prev; // poprzednik
  15. char data;
  16. };
  17.  
  18. // Zmienna obsługująca listę
  19. //--------------------------
  20. struct dlistVar
  21. {
  22. dlistEl * head; // początek listy
  23. dlistEl * tail; // koniec listy
  24. unsigned count; // licznik elementów
  25. };
  26.  
  27. //-----------------------------
  28. // Obsługa listy dwukierunkowej
  29. //-----------------------------
  30.  
  31. // Inicjuje pola zmiennej listy
  32. //---------------------------------------
  33. void l_init ( dlistVar & L )
  34. {
  35. L.head = L.tail = NULL;
  36. L.count = 0;
  37. }
  38.  
  39. // Wyświetla zawartość elementów listy
  40. //----------------------------------------------
  41. void l_printl ( dlistVar & L )
  42. {
  43. dlistEl * p;
  44.  
  45. cout << setw ( 3 ) << L.count << ": [ ";
  46. p = L.head;
  47. while( p )
  48. {
  49. cout << " " << p->data;
  50. p = p->next;
  51. }
  52. cout << " ] \n\n";
  53. }
  54.  
  55. // Dodaje nowy element na początek listy
  56. //------------------------------------------------
  57. void l_push_front ( dlistVar & L, char v )
  58. {
  59. dlistEl * p;
  60.  
  61. p = new dlistEl;
  62. p->data = v;
  63. p->prev = NULL;
  64. p->next = L.head;
  65. L.head = p;
  66. L.count++;
  67. if( p->next ) p->next->prev = p;
  68. else L.tail = p;
  69. }
  70.  
  71. // Dodaje nowy element na koniec listy
  72. //----------------------------------------------
  73. void l_push_back ( dlistVar & L, char v )
  74. {
  75. dlistEl * p;
  76.  
  77. p = new dlistEl;
  78. p->data = v;
  79. p->next = NULL;
  80. p->prev = L.tail;
  81. L.tail = p;
  82. L.count++;
  83. if( p->prev ) p->prev->next = p;
  84. else L.head = p;
  85. }
  86.  
  87. // Dodaje nowy element przed wybranym
  88. //-----------------------------------
  89. void l_insert_before ( dlistVar & L, dlistEl * e, char v )
  90. {
  91. dlistEl * p;
  92.  
  93. if( e == L.head ) l_push_front ( L, v );
  94. else
  95. {
  96. p = new dlistEl;
  97. p->data = v;
  98. p->next = e;
  99. p->prev = e->prev;
  100. L.count++;
  101. e->prev->next = p;
  102. e->prev = p;
  103. }
  104. }
  105.  
  106. // Dodaje nowy element za wybranym
  107. //--------------------------------
  108. void l_insert_after ( dlistVar & L, dlistEl * e, char v )
  109. {
  110. dlistEl * p;
  111.  
  112. if( e == L.tail ) l_push_back ( L, v );
  113. else
  114. {
  115. p = new dlistEl;
  116. p->data = v;
  117. p->next = e->next;
  118. p->prev = e;
  119. L.count++;
  120. e->next->prev = p;
  121. e->next = p;
  122. }
  123. }
  124.  
  125. // Usuwa wybrany element z listy
  126. //------------------------------
  127. void l_remove ( dlistVar & L, dlistEl * e )
  128. {
  129. L.count--;
  130. if( e->prev ) e->prev->next = e->next;
  131. else L.head = e->next;
  132. if( e->next ) e->next->prev = e->prev;
  133. else L.tail = e->prev;
  134. delete e;
  135. }
  136.  
  137. // Usuwa element z początku listy
  138. //-------------------------------
  139. void l_pop_front ( dlistVar & L )
  140. {
  141. if( L.count ) l_remove ( L, L.head );
  142. }
  143.  
  144. // Usuwa element z końca listy
  145. //----------------------------
  146. void l_pop_back ( dlistVar & L )
  147. {
  148. if( L.count ) l_remove ( L, L.tail );
  149. }
  150.  
  151. //---------------
  152. // Program główny
  153. //---------------
  154.  
  155. int main( )
  156. {
  157. dlistVar L;
  158. char i;
  159.  
  160. l_init ( L ); // inicjujemy zmienną obsługi listy
  161.  
  162. for( i = 'A'; i <= 'C'; i++ ) l_push_front ( L, i );
  163. l_printl ( L );
  164. for( i = 'D'; i <= 'F'; i++ ) l_push_back ( L, i );
  165. l_printl ( L );
  166. l_insert_before ( L, L.tail, '#' );
  167. l_printl ( L );
  168. l_insert_after ( L, L.head, '%' );
  169. l_printl ( L );
  170. l_pop_front ( L );
  171. l_printl ( L );
  172. l_pop_back ( L );
  173. l_printl ( L );
  174. l_remove ( L, L.head->next->next );
  175. l_printl ( L );
  176.  
  177. return 0;
  178. }
Advertisement
Add Comment
Please, Sign In to add comment