增加了向前指針的鍊表叫作跳表。跳表全稱叫做跳躍表,簡稱跳表。跳表是一個隨機化的數據結構,實質就是一種可以進行二分查找的有序鍊表。跳表在原有的有序鍊表上面增加了多級索引,通過索引來實現快速查找。跳表不僅能提高搜尋性能,同時也可以提高插入和刪除操作的性能。
基本介紹
- 中文名:跳表
- 外文名:Skip list
- 全稱:跳躍表
- 類型:隨機化的數據結構
- 實質:可以進行二分查找的有序鍊表
- 優點:提高搜尋,插入和刪除性能
簡介
原理
數據結構模型理想情況
實例
有序鍊表的快速搜尋級的分配

性能分析
時間複雜性
空間複雜性
跳表的實現
#ifndef _SKIPLIST_H__#define _SKIPLIST_H__#include<time.h>#include<iostream>#include<vector>#include<cstdio>#include<cstdlib>using namespace std;#define MAXLEVE 8 //跳表的最大層數template<typename K,typename V>struct SkipNode //跳表的節點類型{ K _key; V _value; size_t _sz; //表示該節點的層數 vector<SkipNode<K,V> *> _pleve; //存放每一層的指針 SkipNode(K key=K(),V value=V(),size_t sz=size_t()) :_key(key) ,_value(value) ,_sz(sz) { _pleve.resize(0); for(size_t i=0;i<sz;i++) { _pleve.push_back(NULL); } } ~SkipNode() { _key=-1; _value=-1; _sz=-1; _pleve.clear(); }};template<typename K,typename V>class SkipList //跳表類{public: typedef SkipNode<K,V> Node; SkipList(); void Insert(K key,V value); bool Find(K key,V& value); bool Erase(K key); void Print(); int GetLeve(); //返回跳表的最大層數 size_t Size(); ~SkipList();private: int Random(); //產生隨機層數的函式protected: SkipList(SkipList<K,V> &); //防拷貝 SkipList<K,V>& operator=(SkipList<K,V>); //防賦值private: Node *_head; int _maxLeve; //記錄跳表的最大層數 int _size; //記錄跳表最底層元素的個數}; 
