Advertisement
Tec4Gen

Untitled

Jun 12th, 2019
88
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.90 KB | None | 0 0
  1. #include<iostream>
  2. using namespace std;
  3.  
  4. template<typename Item>
  5. class Double_List
  6. {
  7. private:
  8. struct Element
  9. {
  10. Item inf;
  11. Element* next;
  12. Element* prev;
  13. Element(Item x):inf(x),next(0),prev(0){}
  14. };
  15. Element* head, * tail;
  16. int size;
  17.  
  18. Item* Find(int index) {
  19. Element* cur = head;
  20. for (int i = 0, i < size; i++) {
  21. cur = cur->next;
  22. }
  23. return cur;
  24. }
  25. public:
  26. Double_List() :head(0), tail(0),size(0){}
  27.  
  28. bool Empty() {
  29. head == 0;
  30. }
  31. Item GetLength() {
  32. return size;
  33. }
  34.  
  35. Item Get(int index) {
  36. if(index < 0 || index >size){
  37. cout << "Error";
  38. }
  39. else {
  40. Element* cur = Find(index);
  41. Item value = cur->inf;
  42. delete cur;
  43. return value;
  44. }
  45. }
  46.  
  47. void InsertLeft(int index, Item data) {
  48. if (index < 0 || index >size) {
  49. cout << "Error";
  50. }
  51. else {
  52. Element* newPtr = Element(data);
  53. size = GetLength() + 1;
  54. Element* cur = Find(index);
  55.  
  56. if (cur == NULL) {
  57. head = newPtr;
  58. tail = newPtr;
  59. }
  60. else {
  61. newPtr->next = cur;
  62. newPtr->prev = cur->prev;
  63. cur->prew = newPtr;
  64. }
  65. if (cur == head) {
  66. head = newPtr;
  67. }
  68. else {
  69. newPtr->prev->next = newPtr;
  70. }
  71. }
  72. }
  73. void InsertRight(int index, Item data) {
  74. if (index < 0 || index >size) {
  75. cout << "Error";
  76. }
  77. else {
  78. Element* newPtr = Element(data);
  79. size = GetLength() + 1;
  80. Element* cur = Find(index);
  81.  
  82. if (cur == NULL) {
  83. head = newPtr;
  84. tail = newPtr;
  85. }
  86. else {
  87. newPtr->next = cur->next;
  88. newPtr->prev = cur;
  89. cur->next = newPtr;
  90. }
  91. if (cur == tail) {
  92. tail = newPtr;
  93. }
  94. else {
  95. newPtr->next->prev = newPtr;
  96. }
  97. }
  98. }
  99. void Remove(int index) {
  100. Element* cur = Find(index);
  101. size--;
  102. if (size==0) {
  103. head = NULL;
  104. tail = NULL;
  105. }
  106. else if(cur==head) {
  107. head = head->next;
  108. head->prev=NULl
  109. }
  110. else if (cur == tail) {
  111. tail=tail->prev;
  112. tail->next = NULL;
  113. }
  114. else {
  115. cur->prev->next = cur->next;
  116. cur->next->prev = cur->prev;
  117. }
  118. }
  119.  
  120. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement