Advertisement
Guest User

Untitled

a guest
Apr 20th, 2019
93
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.47 KB | None | 0 0
  1. #include "pch.h"
  2. #include <iostream>
  3. using namespace std;
  4. struct skipnode {
  5.     skipnode**next;
  6.     int val;
  7.     int max_ava_lvl;
  8. };
  9. struct skiplist {
  10.     skipnode*first;
  11.     int max_level = 9;
  12. };
  13. int getlvl(int max) {
  14.     int i = 1;
  15.     for (i; i <= max; i++) {
  16.         if (rand() % 2 == 1)break;
  17.     }
  18.     return i;
  19. }
  20. void insert(int key, skiplist*& a) {
  21.  
  22.     skipnode* to_insert = new skipnode;
  23.  
  24.     int lvl = getlvl(a->max_level);
  25.     to_insert->max_ava_lvl = lvl;
  26.     to_insert->val = key;
  27.     skipnode*temp = a->first;
  28.     if (a->first == NULL) {
  29.         lvl = a->max_level;
  30.         to_insert->max_ava_lvl = lvl;
  31.         to_insert->next = new skipnode*[lvl];
  32.         a->first = to_insert;
  33.         for (int i = to_insert->max_ava_lvl - 1; i >= 0; i--) {
  34.             a->first->next[i] = NULL;
  35.         }
  36.         return;
  37.     }
  38.     to_insert->next = new skipnode*[lvl];
  39.     if (temp->val > key) {
  40.         to_insert->max_ava_lvl = a->max_level;
  41.         to_insert->next = new skipnode*[a->max_level];
  42.         for (int i = to_insert->max_ava_lvl - 1; i >= 0; i--) {
  43.             to_insert->next[i] = a->first;
  44.         }
  45.         a->first = to_insert;
  46.         return;
  47.     }
  48.     to_insert->next = new skipnode*[lvl];
  49.     for (int i = a->max_level - 1; i >= 0; i--) {
  50.         while ((temp->next[i]!=NULL) && key > temp->next[i]->val) {
  51.             temp = temp->next[i];
  52.         }
  53.         if (lvl >= i) {
  54.             to_insert->next[i] = temp->next[i];
  55.             temp->next[i]= to_insert;
  56.         }
  57.     }
  58.  
  59. }
  60. void print(skiplist* start) {
  61.     skipnode*temp = start->first;
  62.     while (temp != NULL) {
  63.         cout << temp->val<<" ";
  64.         temp = temp->next[0];
  65.     }
  66.     cout << endl;
  67. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement