Skip to main content

A Python library to implement various data structures.

Project description

collections-plus

A Python library implementing various data structures.

Installation

You can install this package using pip:

pip install collections-plus

and import the library with

import collections_plus

Please note that this code is in a pre-alpha state and will likely contain bugs.

Basic Usage and Examples

Currently, collections-plus supports Linked Lists and Doubly Linked Lists. Briefly speaking, a linked list is a data structure where each node stores both a value and a pointer to the next node. This makes insertions and removals near the start very fast, at the expense of slower indexing. A doubly linked list is similar, but nodes store pointers to the previous nodes as well. This allows us to pop quickly from both sides, not just the start.

Linked Lists

To create a Linked List, first import the class:

from collections_plus import LinkedList

Then, you can create a Linked List like so:

my_llist = LinkedList(1, 2, 3, "pi", 4)

Or, if you have an existing list, you can unpack it:

sample_list = [1, 4, 3, 4]
sample_ll = LinkedList(*sample_list)

LinkedLists support most things you can do with a good old Python list. For instance, you can index into, mutate, and delete nodes (unfortunately, slicing is not implemented as of version 0.2.0):

indexed = my_llist[1] # indexed = 2
my_llist[2] = "approx pi" # sets value to "approx pi"
del my_llist[1] 
print(my_llist) # LinkedList(1, "approx pi", "pi" 4)

Notably, you can pop, append, and insert:

sample_ll.pop() # returns 1
print(sample_ll) # LinkedList(4, 3, 4)
sample_ll.pop(2) # returns 4
print(sample_ll) # LinkedList(4, 3)
sample_ll.append("game")
print(sample_ll) # LinkedList(4, 3, 'game')
sample_ll.insert(0, "lost")
print(sample_ll) # LinkedList('lost', 4, 3, 'game')

Generally, pop, append, and insert will most often be used to implement a FILO or FIFO queue. Please note that insert(-1, val) is not equivalent to append(val) - the value is inserted before the index. To insert to the end, use append or insert(len(llist), val).

You can also iterate over a linked list directly:

for val in sample_ll:
    print(val) # will print 'lost', '4', '3', 'game'

This package also supports a variety of other functions that work very similar to their equivalents for default lists:

  • len(llist)
  • llist.extend(other)
  • llist.count(val)
  • llist.index(val)
  • llist.remove(val)
  • llist.copy()
  • Binary comparators ==, !=, <, <=, >, >=
  • Operators + and *

Doubly Linked Lists

To create a Doubly Linked List, import and create similarly:

from collections_plus import DoublyLinkedList

array = ['agent', 'blind', 'cross', 'door', 'entendre']
my_dll = DoublyLinkedList(*array)

Doubly linked lists support everything that linked lists support. However, they also come with a few additional methods lpop, rpop, and lappend (primarily to make implementing a queue easier):

first = my_dll.lpop() # first = 'agent'
second = my_dll.lpop() # second = 'blind'
last = my_dll.rpop() # last = 'entendre'
my_dll.lappend('bass')
my_dll.append('edged')
print(my_dll) # DoublyLinkedList('bass', 'cross', 'door', 'edged')

In addition, because a doubly linked list keeps tracks of pointers in both directions, you can quickly traverse the list backwards (as opposed to a singly linked list, which will be slower):

for val in reversed(my_dll):
    print(val) # prints 'edged', 'door', 'cross', 'bass'

Roadmap:

Data structures that are planned:

  • Min and max heaps
  • Priority queue
  • Circularly linked lists
  • Binary trees
  • AVL tree
  • Trie/Prefix tree
  • Graphs
  • Segment tree
  • Disjoint set union

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

collections_plus-0.2.0.tar.gz (7.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

collections_plus-0.2.0-py3-none-any.whl (8.7 kB view details)

Uploaded Python 3

File details

Details for the file collections_plus-0.2.0.tar.gz.

File metadata

  • Download URL: collections_plus-0.2.0.tar.gz
  • Upload date:
  • Size: 7.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.8.3 CPython/3.10.12 Linux/5.15.153.1-microsoft-standard-WSL2

File hashes

Hashes for collections_plus-0.2.0.tar.gz
Algorithm Hash digest
SHA256 b1a9d4315bd15eec92eebd4b88a8f80070d2db9050ff021a7c783a3a0715e078
MD5 0a80fed9908619283079ef0e580c8ec0
BLAKE2b-256 28841aa774e702b0fd113f08a2e3f21a3bfaf6903be5985a990d1001810a5588

See more details on using hashes here.

File details

Details for the file collections_plus-0.2.0-py3-none-any.whl.

File metadata

  • Download URL: collections_plus-0.2.0-py3-none-any.whl
  • Upload date:
  • Size: 8.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.8.3 CPython/3.10.12 Linux/5.15.153.1-microsoft-standard-WSL2

File hashes

Hashes for collections_plus-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 36e95294155bcc389fec077d0330a0f3f51c5546d1087511c26e105303935595
MD5 6434bbbe0d7cdf86b4568549a51482a3
BLAKE2b-256 fa973cd8113e03394bb67a42c01e1a349103135e8f995697ead58d7d0ea0475b

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page