logo
Free, unlimited AI code reviews that run on commit
git-lrc git-lrc GitHub Install Now We'd appreciate a star git-lrc - Free, unlimited AI code reviews that run on commit | Product Hunt git-lrc - Free, unlimited AI code reviews that run on commit | Product Hunt

struct::skiplist - Create and manipulate skiplists

Bugs, Ideas, Feedback

       This document, and the package it describes, will undoubtedly contain bugs and  other  problems.   Please
       report     such     in     the    category    struct::skiplist    of    the    TcllibTrackers
       [http://core.tcl.tk/tcllib/reportlist].  Please also report any ideas for enhancements you may  have  for
       either package and/or documentation.

       When proposing code changes, please provide unifieddiffs, i.e the output of diff-u.

       Note  further  that  attachments  are strongly preferred over inlined patches. Attachments can be made by
       going to the Edit form of the ticket immediately after its creation, and then using the left-most  button
       in the secondary navigation bar.

Category

       Data structures

Description

       The  ::struct::skiplist command creates a new skiplist object with an associated global Tcl command whose
       name is skiplistName. This command may be used to invoke various operations on the skiplist. It  has  the
       following general form:

       skiplistNameoption ?argarg...?
              Option and the args determine the exact behavior of the command.

       Skip  lists are an alternative data structure to binary trees. They can be used to maintain ordered lists
       over any sequence of insertions and  deletions.  Skip  lists  use  randomness  to  achieve  probabilistic
       balancing,  and  as a result the algorithms for insertion and deletion in skip lists are much simpler and
       faster than those for binary trees.

       To read more about skip lists see Pugh, William.  Skiplists:aprobabilisticalternativetobalancedtrees In: Communications of the ACM, June 1990, 33(6) 668-676.

       Currently,  the  key  can be either a number or a string, and comparisons are performed with the built in
       greater than operator.  The following commands are possible for skiplist objects:

       skiplistNamedeletenode ?node...?
              Remove the specified nodes from the skiplist.

       skiplistNamedestroy
              Destroy the skiplist, including its storage space and associated command.

       skiplistNameinsertkeyvalue
              Insert a node with the given key and value into the skiplist. If a  node  with  that  key  already
              exists, then the that node's value is updated and its node level is returned. Otherwise a new node
              is created and 0 is returned.

       skiplistNamesearchnode ?-keykey?
              Search  for  a  given  key  in  a skiplist. If not found then 0 is returned.  If found, then a two
              element list of 1 followed by the node's value is retuned.

       skiplistNamesize
              Return a count of the number of nodes in the skiplist.

       skiplistNamewalkcmd
              Walk the skiplist from the first node to the last. At each node, the command cmd will be evaluated
              with the key and value of the current node appended.

Keywords

       skiplist

Name

       struct::skiplist - Create and manipulate skiplists

Synopsis

       package require Tcl8.59

       package require struct::skiplist?1.4?skiplistNameoption ?argarg...?

       skiplistNamedeletenode ?node...?

       skiplistNamedestroyskiplistNameinsertkeyvalueskiplistNamesearchnode ?-keykey?

       skiplistNamesizeskiplistNamewalkcmd

________________________________________________________________________________________________________________

See Also