Advertisement
Guest User

Untitled

a guest
Dec 11th, 2017
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.05 KB | None | 0 0
  1. #include <fstream>
  2. #include <iostream>
  3. using namespace std;
  4.  
  5. ifstream fin("f.txt");
  6. ofstream fout("g.txt");
  7.  
  8.  
  9. void delacc()
  10. {
  11. fstream file;
  12. file.open("C:/Users/Артем/Desktop/Шифровка/g.txt", ios::out);
  13. file << "";
  14. file.close();
  15. }
  16.  
  17.  
  18. struct tree
  19. {
  20. int elem1;
  21. char elem2;
  22. tree *left;
  23. tree *right;
  24. tree *lef;
  25. tree *rig;
  26. };
  27.  
  28. void fun(int io)
  29. {
  30. if (io > 0)
  31. {
  32. fun(io/10);
  33. fout << io%10-1;
  34. }
  35. return ;
  36. }
  37.  
  38. void prog(tree *&p, int io)
  39. {
  40. if (p->rig == NULL)
  41. {
  42. fun(io);
  43. fout << " " << p->elem2 << "\n";
  44. }
  45. else
  46. {
  47. tree *Le, *Ri;
  48. Le = p->lef;
  49. Ri = p->rig;
  50. io = io*10+1;
  51. prog(Le, io);
  52. io++;
  53. prog(Ri, io);
  54. }
  55. return ;
  56. }
  57.  
  58.  
  59. int main()
  60. {
  61. delacc();
  62. int a, b, c, i, j = 0, swa;
  63. char q, sw;
  64. tree *L;
  65. L = new tree;
  66. q = fin.get();
  67. L->elem2 = q;
  68. L->elem1 = 1;
  69. L->left = NULL;
  70. L->right = NULL; L->rig = NULL; L->lef = NULL;
  71. tree *p, *z;
  72. while (fin.peek() != EOF)
  73. {
  74. q = fin.get();
  75. p = L;
  76. while (p->elem2 != q && p->right != NULL)
  77. {
  78. p = p->right;
  79. }
  80. if (p->elem2 == q) p->elem1++;
  81. else
  82. {
  83. j++;
  84. z = new tree;
  85. p->right = z;
  86. z->left = p;
  87. p = p->right;
  88. p->elem2 = q;
  89. p->elem1 = 1;
  90. p->right = NULL;
  91. p->lef = NULL; p->rig = NULL;
  92. }
  93. }
  94. p = L;
  95. if (p->right != NULL)
  96. {
  97. for (i = 1; i <= j; i++)
  98. {
  99. p = L;
  100. while (p->right->right != NULL)
  101. {
  102. if (p->elem1 > p->right->elem1)
  103. {
  104. swa = p->elem1;
  105. sw = p->elem2;
  106. p->elem1 = p->right->elem1;
  107. p->elem2 = p->right->elem2;
  108. p->right->elem1 = swa;
  109. p->right->elem2 = sw;
  110. }
  111. p = p->right;
  112. }
  113. if (p->elem1 > p->right->elem1)
  114. {
  115. swa = p->elem1;
  116. sw = p->elem2;
  117. p->elem1 = p->right->elem1;
  118. p->elem2 = p->right->elem2;
  119. p->right->elem1 = swa;
  120. p->right->elem2 = sw;
  121. }
  122. }
  123.  
  124.  
  125. while (L->right->right != NULL)
  126. {
  127. z = new tree;
  128. z->elem1 = L->elem1 + L->right->elem1;
  129. z->lef = L;
  130. z->rig = L->right;
  131. z->right = L->right->right;
  132. z->left = NULL;
  133. L = z;
  134. if (z->right != NULL) z->right->left = z;
  135. while (z->right->elem1 < z->elem1 && z->right->right != NULL)
  136. {
  137. if (z->left != NULL)
  138. {
  139. z->left->right = z->right;
  140. z->right->left = z->left;
  141. }
  142. else
  143. {
  144. z->right->left = NULL;
  145. L = z->right;
  146. }
  147. z->left = z->right;
  148. z->right = z->left->right;
  149. z->right->left = z;
  150. z->left->right = z;
  151.  
  152. }
  153. if (z->right->elem1 < z->elem1)
  154. {
  155. if (z->left != NULL)
  156. {
  157. z->left->right = z->right;
  158. z->right->left = z->left;
  159. }
  160. else
  161. {
  162. z->right->left = NULL;
  163. L = z->right;
  164. }
  165. z->left = z->right;
  166. z->right = z->left->right;
  167. z->left->right = z;
  168. }
  169. }
  170.  
  171. z = new tree;
  172. z->elem1 = L->elem1 + L->right->elem1;
  173. z->lef = L;
  174. z->rig = L->right;
  175. z->right = L->right->right;
  176. z->left = NULL;
  177. L = z;
  178. }
  179.  
  180. prog(L, 0);
  181. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement