Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <ctime>
- #include <stdio.h>
- #include <stdlib.h>
- using namespace std;
- class Node
- {
- public:
- int key;
- double d_variable;
- char ch_variable;
- Node** forward;
- //node constructor
- Node(int key, int level)
- {
- this->key = key;
- this->d_variable = rand();
- this->ch_variable = 'T';
- forward = new Node * [level + 1];
- for (int i = 0; i < level + 1; i++)
- {
- forward[i] = NULL;
- }
- }
- };
- class Skiplist
- {
- public:
- Node* HEADER;
- unsigned int MAX_LEVEL;
- int level;
- float PROB;
- //constructor
- Skiplist(int MAX_LEVEL,float PROB)
- {
- this->MAX_LEVEL = MAX_LEVEL;
- this->PROB = PROB;
- level =0;
- HEADER = new Node(-1,MAX_LEVEL);
- }
- //creates new node
- Node* createNode(int key,int level)
- {
- Node* new_node = new Node(key, level);
- return new_node;
- }
- //generates random level including probability
- int randomLevel()
- {
- int level = 0;
- int r = rand() % 100;
- while ((r < PROB * 100) && (level < MAX_LEVEL))
- {
- level++;
- r = rand() % 100;
- }
- return level;
- }
- //inserts one element to the list
- void insertElement(int key)
- {
- Node* current = HEADER;
- Node** update=new Node*[MAX_LEVEL+1];
- for (int i = 0; i <MAX_LEVEL+1; i++)
- {
- update[i] = NULL;
- }
- for (int i = level; i >= 0; i--)
- {
- while ((current->forward[i] != NULL) && (current->forward[i]->key < key))
- {
- current = current->forward[i];
- }
- update[i] = current;
- }
- current = current->forward[0];
- if (current == NULL || current->key != key)
- {
- int r_level = randomLevel();
- if (r_level > level)
- {
- for (int i = level + 1; i < r_level + 1; i++)
- {
- update[i] = HEADER;
- }
- level = r_level;
- }
- Node* new_node = createNode(key, r_level);
- for (int i = 0; i < r_level+1; i++)
- {
- new_node->forward[i] = update[i]->forward[i];
- update[i]->forward[i] = new_node;
- }
- cout << "Yikes" << endl;
- }
- }
- void showAll()
- {
- Node* current = HEADER->forward[0];
- while (current != NULL)
- {
- cout << endl << "Key value:" << current->key<<endl;
- current = current->forward[0];
- }
- }
- //inserts many elements to the list
- void insertManyElements()
- {}
- //finds element in a list
- void findElement()
- {}
- //returns an array of how many nodes there are in particular levels
- int howManyNodes()
- {}
- //shows X first elements
- void showFirstElements()
- {}
- //shows Y last elements
- void showLastElements()
- {}
- //deletes an element from a list
- void deleteElement()
- {}
- //deletes entire list
- void deleteList()
- {}
- };
- int main()
- {
- srand(time(NULL));
- Skiplist my_list(5, 0.5);
- my_list.insertElement(6);
- my_list.insertElement(11);
- my_list.insertElement(4);
- my_list.insertElement(1);
- my_list.insertElement(2);
- my_list.insertElement(20);
- my_list.showAll();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement