Advertisement
Guest User

Untitled

a guest
Dec 16th, 2017
70
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.27 KB | None | 0 0
  1. #include "stdafx.h"
  2. #include <iostream>
  3. #include <cstring>
  4.  
  5. using namespace std;
  6.  
  7. class Node {
  8. public:
  9.  
  10. char bukwa;
  11. char* pos;
  12. class Node *prev, *next;
  13.  
  14. void swap(Node* n) {
  15. char tempb = this->bukwa;
  16. char* tempp = this->pos;
  17. this->bukwa = n->bukwa;
  18. this->pos = n->pos;
  19. n->pos = tempp;
  20. n->bukwa = tempb;
  21. }
  22.  
  23.  
  24. // Node(Node* n){
  25. // this->bukwa = n->bukwa;
  26. // this->pos = n->pos;
  27. // this->next = n->next;
  28. // this->prev = n->prev;
  29. // }
  30.  
  31. Node(char bukwa, char* napis) {
  32. this->bukwa = bukwa;
  33. pos = new char[65];
  34. int i = 0;
  35. if (!*napis)
  36. *pos = '\0';
  37. else {
  38. while (*(napis + i)) {
  39. *(this->pos + i) = *(napis + i);
  40. i++;
  41. }
  42. *(this->pos + i) = '\0';
  43. }
  44. next = nullptr;
  45. prev = nullptr;
  46. }
  47.  
  48.  
  49.  
  50. friend ostream& operator<<(ostream& str, Node n) {
  51. str << n.bukwa << (char)32 << n.pos;
  52. return str;
  53. }
  54. };
  55.  
  56. class List {
  57. public:
  58. Node * head, *tail;
  59.  
  60. List() {
  61. head = nullptr;
  62. tail = nullptr;
  63. char* temp = new char[65];
  64. char b;
  65. while (!cin.eof()) {
  66. cin >> b >> temp;
  67. if(*temp=='L'||*temp=='R')
  68. this->push(new Node(b, temp));
  69. else {
  70. char* x = new char[65];
  71. cin >> x;
  72. this->push(new Node(b, new char('\0')));
  73. this->push(new Node(*temp, x));
  74. }
  75. }
  76. }
  77.  
  78. List* push(Node* n) {
  79. n->next = this->head;
  80. n->prev = NULL;
  81. if (this->head) {
  82. this->head->prev = n;
  83. }
  84. this->head = n;
  85. if (this->tail == NULL) {
  86. this->tail = n;
  87. }
  88. return this;
  89. }
  90.  
  91. void sort(Node* first, Node* last, int level) {
  92. if (first == last)return;
  93. bool key = false;
  94. bool swap = false;
  95. Node *empty = first;
  96. Node *lpointer = first, *rpointer = last;
  97. while (lpointer != rpointer) {
  98. if (!swap)
  99.  
  100. if (lpointer->pos[level] == '\0') {
  101. lpointer = lpointer->next;
  102. empty = empty->next;
  103. }
  104. else {
  105. swap = true;
  106. key = true;
  107. }
  108. else
  109. if (rpointer->pos[level] == '\0') {
  110. rpointer->swap(lpointer);
  111. swap = false;
  112. }
  113. else
  114. rpointer = rpointer->prev;
  115. }
  116. if (key) {
  117. swap = false;
  118. lpointer = empty;
  119. rpointer = last;
  120. while (lpointer != rpointer) {
  121. if (!swap)
  122. if (lpointer->pos[level] == 'L')
  123. lpointer = lpointer->next;
  124. else
  125. swap = true;
  126. else
  127. if (rpointer->pos[level] == 'R')
  128. rpointer = rpointer->prev;
  129. else {
  130. rpointer->swap(lpointer);
  131. swap = false;
  132. }
  133. }
  134. level++;
  135. if ((lpointer == empty) || (rpointer == last))
  136. sort(empty, last, level);
  137. else {
  138. sort(empty, lpointer->prev, level);
  139. sort(rpointer, last, level);
  140. }
  141.  
  142. }
  143. }
  144.  
  145.  
  146. friend ostream& operator<<(ostream& str, List l) {
  147. Node *temp = l.head;
  148. while (temp) {
  149. str << *temp << '\n';
  150. temp = temp->next;
  151. }
  152. return str;
  153. }
  154.  
  155. };
  156.  
  157. int main() {
  158. char *temp = new char[67];
  159. char word[] = "fasds";
  160. temp = word;
  161. //char *start = temp;
  162. //cout << temp;
  163.  
  164. List* list = new List;
  165.  
  166. //cout << *list->head; //<< endl << *list->head->next;
  167. //list->push(new Node('a', temp));
  168. cout << *list;
  169. system("pause");
  170. // cout << "tail="<<*list->tail<<endl;
  171. // cout << "head="<<*list->head<<endl;
  172. // list->sort(list->head,list->tail,0);
  173. // cout << *list;
  174. return 0;
  175. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement