Advertisement
Quebonamade

Algo2

Oct 20th, 2019
118
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.86 KB | None | 0 0
  1. #include <iostream>
  2. #include <ctime>
  3. #include <stdio.h>
  4. #include <stdlib.h>
  5. using namespace std;
  6. class Node
  7. {
  8. public:
  9. int key;
  10. double d_variable;
  11. char ch_variable;
  12. Node** forward;
  13. //node constructor
  14. Node(int key, int level)
  15. {
  16. this->key = key;
  17. this->d_variable = rand();
  18. this->ch_variable = 'T';
  19. forward = new Node * [level + 1];
  20. for (int i = 0; i < level + 1; i++)
  21. {
  22. forward[i] = NULL;
  23. }
  24. }
  25. };
  26. class Skiplist
  27. {
  28. public:
  29. Node* HEADER;
  30. unsigned int MAX_LEVEL;
  31. int level;
  32. float PROB;
  33.  
  34. //constructor
  35. Skiplist(int MAX_LEVEL,float PROB)
  36. {
  37. this->MAX_LEVEL = MAX_LEVEL;
  38. this->PROB = PROB;
  39. level =0;
  40. HEADER = new Node(-1,MAX_LEVEL);
  41. }
  42.  
  43. //creates new node
  44. Node* createNode(int key,int level)
  45. {
  46. Node* new_node = new Node(key, level);
  47. return new_node;
  48. }
  49.  
  50. //generates random level including probability
  51. int randomLevel()
  52. {
  53. int level = 0;
  54. int r = rand() % 100;
  55. while ((r < PROB * 100) && (level < MAX_LEVEL))
  56. {
  57. level++;
  58. r = rand() % 100;
  59. }
  60. return level;
  61. }
  62.  
  63. //inserts one element to the list
  64. void insertElement(int key)
  65. {
  66. Node* current = HEADER;
  67. Node** update=new Node*[MAX_LEVEL+1];
  68. for (int i = 0; i <MAX_LEVEL+1; i++)
  69. {
  70. update[i] = NULL;
  71. }
  72. for (int i = level; i >= 0; i--)
  73. {
  74. while ((current->forward[i] != NULL) && (current->forward[i]->key < key))
  75. {
  76. current = current->forward[i];
  77. }
  78. update[i] = current;
  79.  
  80. }
  81. current = current->forward[0];
  82. if (current == NULL || current->key != key)
  83. {
  84. int r_level = randomLevel();
  85. if (r_level > level)
  86. {
  87. for (int i = level + 1; i < r_level + 1; i++)
  88. {
  89. update[i] = HEADER;
  90. }
  91. level = r_level;
  92. }
  93. Node* new_node = createNode(key, r_level);
  94. for (int i = 0; i < r_level+1; i++)
  95. {
  96. new_node->forward[i] = update[i]->forward[i];
  97. update[i]->forward[i] = new_node;
  98. }
  99. cout << "Yikes" << endl;
  100. }
  101.  
  102. }
  103. void showAll()
  104. {
  105. Node* current = HEADER->forward[0];
  106. while (current != NULL)
  107. {
  108. cout << endl << "Key value:" << current->key<<endl;
  109. current = current->forward[0];
  110. }
  111. }
  112.  
  113. //inserts many elements to the list
  114. void insertManyElements()
  115. {}
  116.  
  117. //finds element in a list
  118. void findElement()
  119. {}
  120.  
  121. //returns an array of how many nodes there are in particular levels
  122. int howManyNodes()
  123. {}
  124.  
  125. //shows X first elements
  126. void showFirstElements()
  127. {}
  128.  
  129. //shows Y last elements
  130. void showLastElements()
  131. {}
  132.  
  133. //deletes an element from a list
  134. void deleteElement()
  135. {}
  136.  
  137. //deletes entire list
  138. void deleteList()
  139. {}
  140.  
  141. };
  142. int main()
  143. {
  144. srand(time(NULL));
  145. Skiplist my_list(5, 0.5);
  146. my_list.insertElement(6);
  147. my_list.insertElement(11);
  148. my_list.insertElement(4);
  149. my_list.insertElement(1);
  150. my_list.insertElement(2);
  151. my_list.insertElement(20);
  152. my_list.showAll();
  153.  
  154.  
  155. return 0;
  156. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement