In this chapter, we discuss a beautiful data structure: the skiplist,
which has a variety of applications. Using a skiplist we can implement a
`List` that has time implementations of
,
,
, and
. We can also implement an `SSet` in which
all operations run in
expected time.

The efficiency of skiplists relies on their use of randomization. When a new element is added to a skiplist, the skiplist uses random coin tosses to determine the height of the new element. The performance of skiplists is expressed in terms of expected running times and path lengths. This expectation is taken over the random coin tosses used by the skiplist. In the implementation, the random coin tosses used by a skiplist are simulated using a pseudo-random number (or bit) generator.

- 4.1 The Basic Structure
- 4.2
`SkiplistSSet`: An Efficient`SSet` - 4.3
`SkiplistList`: An Efficient Random-Access`List` - 4.4 Analysis of Skiplists
- 4.5 Discussion and Exercises

opendatastructures.org