Advertisement
Guest User

Untitled

a guest
Nov 18th, 2019
91
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.63 KB | None | 0 0
  1. #include <iostream>
  2.  
  3. class Elem {
  4. private:
  5. int v;
  6. Elem* next_elem;
  7. Elem* prev_elem;
  8.  
  9. public:
  10. Elem() { //tworzy pusty element
  11. }
  12. Elem(int x) { //tworzy element przechowujący x
  13. v = x;
  14. }
  15. int value(){
  16. return v;
  17. }
  18. void setValue(int v) { //ustawia warość v
  19. this->v = v;
  20. }
  21. Elem* next() { //zwraca następny element
  22. return next_elem;
  23. }
  24. Elem* prev() { //zwraca poprzednielement
  25. return prev_elem;
  26. }
  27. void setNext(Elem* p) { //ustawia p jako następny element
  28. next_elem = p;
  29. }
  30. void setPrev(Elem* p) { //ustawia p jako poprzedni element
  31. prev_elem = p;
  32. }
  33. };
  34.  
  35. class SortedDLList {
  36. private:
  37. Elem* head; //wskaźnik na pierwszy element list
  38. Elem* tail; //wskaźnik na ostatni element list
  39. int list_size; //długość listy
  40.  
  41. public:
  42. SortedDLList(){
  43. head = tail = nullptr;
  44. list_size = 0;
  45. }
  46. bool empty() {
  47. return (list_size == 0);
  48. }
  49. int size() {
  50. return list_size;
  51. }
  52. Elem* first() { //zwraca pozycję pierwszego elementu
  53. return head;
  54. }
  55. Elem* last() { //zwraca pozycję ostatniego elementu
  56. return tail;
  57. }
  58. Elem* next(Elem * p) { //zwraca pozycję elementu następnego za p
  59. return p->next();
  60. }
  61. Elem* prev(Elem* p) { //zwraca pozycję elementu poprzedniego przed p
  62. return p->prev();
  63. }
  64. int retrieve(Elem* p) { //zwraca relement z pozycji p
  65. return p->value();
  66. }
  67. Elem* locate(int x) { //zwraca pozycję pierwszego wystąpienia elementu x, -1 jeśli x nie występuje
  68. Elem* actual = head;
  69. while (actual != tail) {
  70. if (actual->value() == x)
  71. return actual;
  72. actual = actual->next();
  73. }
  74. return nullptr;
  75. }
  76. void insert(int x) { //wstawia x z zachowniem porządku
  77. Elem* newEl = new Elem(x);
  78. if (head == tail && list_size==0) {
  79. head = newEl;
  80. tail = newEl;
  81. }
  82. else if (head == tail && list_size != 0) {
  83. if (x > head->value()) {
  84. tail = newEl;
  85. tail->setPrev(head);
  86. head->setNext(newEl);
  87. }
  88. else {
  89. head = newEl;
  90. head->setNext(tail);
  91. tail->setPrev(head);
  92. }
  93. }
  94. else if (x < head->value()) {
  95. newEl->setNext(head);
  96. newEl->setPrev(nullptr);
  97. head->setPrev(newEl);
  98. head = newEl;
  99. }
  100. else if (x > tail->value()) {
  101. newEl->setNext(nullptr);
  102. newEl->setPrev(tail);
  103. tail->setNext(newEl);
  104. tail = newEl;
  105. }
  106. else {
  107.  
  108. }
  109. list_size++;
  110. }
  111. void del(int x) { //usuwa pierwsze wystąpienie element x
  112. Elem* pos = locate(x);
  113. if (pos==head){
  114. head = pos->next();
  115. }
  116. else if (pos == tail) {
  117. tail = pos->prev();
  118. }
  119. else {
  120. Elem* posnext = pos->next();
  121. while (posnext != tail) {
  122. pos->setPrev(posnext->prev());
  123. pos->setNext(posnext->next());
  124. pos->setNext(posnext->next());
  125. pos->setValue(posnext->value());
  126. posnext = pos->next();
  127. }
  128. }
  129. }
  130. void clear() { //usuwa całą listę
  131. Elem* current = head;
  132. Elem* next;
  133.  
  134. while (current != nullptr)
  135. {
  136. next = current->next();
  137. free(current);
  138. current = next;
  139. list_size--;
  140. }
  141.  
  142. head = NULL;
  143. }
  144. friend std::ostream& operator<<(std::ostream& out, SortedDLList& l){ //wypisuje elementu listy
  145. Elem* current = l.first();
  146. do{
  147. out << current->value() << "\t";
  148. current = current->next();
  149. }
  150. while (current != l.last());
  151. out << l.last()->value();
  152. return out;
  153. }
  154. };
  155.  
  156. int main(){
  157. SortedDLList *DLlist = new SortedDLList();
  158. DLlist->insert(5);
  159. DLlist->insert(4);
  160. DLlist->insert(10);
  161. DLlist->insert(8);
  162. //std::cout << DLlist->last()->value();
  163. //std::cout << DLlist->first()->value();
  164. std::cout << *DLlist;
  165. //DLlist->clear();
  166. //std::cout << *DLlist;
  167. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement