📜  Python中的llist模块

📅  最后修改于: 2022-05-13 01:54:28.688000             🧑  作者: Mango

Python中的llist模块

直到很长一段时间, Python都无法执行链表数据结构。它确实支持列表,但是在将它们用作链表的概念时遇到了许多问题,例如列表是刚性的并且没有通过指针连接,因此占用了定义的内存空间,如果列表没有完全填充,甚至可能会浪费。事实上,为了克服列表存在的问题,Python 的 dequeue 数据结构也可以像链表一样工作。但是由于llist ,所有这些都被覆盖了。

Python中的llist模块

llist 是 CPython 的扩展模块,提供了基本的链表结构。它们比出列甚至标准列表要快得多。

安装

要利用 llist 提供的好处,必须像任何其他Python扩展或模块一样使用 pip 安装它。以下命令将完成这项工作。

pip install llist

如果不是这个,可以从http://pypi手动下载。 Python.org/pypi ,然后解压资源并使用“Python setup.py install”编译它们。成功安装模块后,您只需在需要时导入此模块。

提供的方法

目前,llist 提供以下两种链表:

  1. 单链表(sllist) :一个链表,其中的节点指向它旁边的节点。
  2. 双向链表(dllist) :一个链表,其中节点指向它之后的节点以及它之前的节点。

该模块包含以下对象:

  • dllist :实现双向链表的对象
  • dllistnode :返回一个新的双向链表节点,可选初始化
  • dllistiterator: dllist 的迭代器对象
  • sllist :实现单链表的对象
  • sllistnode :单链表节点,可选初始化
  • sllistiterator : sllist的迭代器对象

以下示例将帮助您更好地理解。它们给出了关于 llist 支持的两种类型列表的执行的基本思想:
示例 1: sllist

# importing packages
import llist
from llist import sllist, sllistnode
  
# creating a linked list
lst = sllist(['first', 'second', 'third'])
print(lst)
print(lst.first)
print(lst.last)
print(lst.size)
print()
  
# adding and inserting values
lst.append('fourth')
node = lst.nodeat(2)
lst.insertafter('fifth', node)
print(lst)
print(lst.first)
print(lst.last)
print(lst.size)
print()
  
# poping a value
# i.e. removing the last entry of the list
lst.pop()
print(lst)
print(lst.first)
print(lst.last)
print(lst.size)
print()
  
# removing a specific element
node = lst.nodeat(1)
lst.remove(node)
print(lst)
print(lst.first)
print(lst.last)
print(lst.size)
print()

输出:

sllist([first, second, third])
sllistnode(first)
sllistnode(third)
3

sllist([first, second, third, fifth, fourth])
sllistnode(first)
sllistnode(fourth)
5

sllist([first, second, third, fifth])
sllistnode(first)
sllistnode(fifth)
4

sllist([first, third, fifth])
sllistnode(first)
sllistnode(fifth)
3

示例 2: dll 列表

# importing packages
import llist
from llist import dllist, dllistnode
  
# creating a linked list
lst = dllist(['first', 'second', 'third'])
print(lst)
print(lst.first)
print(lst.last)
print(lst.size)
print()
  
# adding and inserting values
lst.append('fourth')
node = lst.nodeat(2)
lst.extendleft(['fifth', 'sixth'])
new_node = dllistnode('seventh')
ref_node = lst.nodeat(2)
lst.insertnode(new_node, ref_node)
  
print(lst)
print(lst.first)
print(lst.last)
print(lst.size)
print()
  
# poping a value
# i.e. removing the last entry of the list
lst.pop()
print(lst)
print(lst.first)
print(lst.last)
print(lst.size)
print()
  
# removing a specific element
node = lst.nodeat(1)
lst.remove(node)
print(lst)
print(lst.first)
print(lst.last)
print(lst.size)
print()

输出:

dllist([first, second, third])
dllistnode(first)
dllistnode(third)
3

dllist([sixth, fifth, seventh, first, second, third, fourth])
dllistnode(sixth)
dllistnode(fourth)
7

dllist([sixth, fifth, seventh, first, second, third])
dllistnode(sixth)
dllistnode(third)
6

dllist([sixth, seventh, first, second, third])
dllistnode(sixth)
dllistnode(third)
5