Quebonamade

Algo2

Oct 20th, 2019
55
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 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. }
Add Comment
Please, Sign In to add comment