常用结构python

  1. 栈(Stack):一种线性数据结构,具有先进后出(LIFO)的特点。常用的操作有压栈(push)、弹栈(pop)、获取栈顶元素(top)等。

示例:

stack = []
stack.append(1) # push
stack.append(2) # push
stack.pop() # pop,弹出2
stack[-1] # top,返回1
  1. 队列(Queue):一种线性数据结构,具有先进先出(FIFO)的特点。常用的操作有入队(enqueue)、出队(dequeue)、获取队头元素(front)等。

示例:

from collections import deque

queue = deque()
queue.append(1) # enqueue
queue.append(2) # enqueue
queue.popleft() # dequeue,弹出1
queue[0] # front,返回2
  1. 双端队列(Deque):一种线性数据结构,可以在队头和队尾进行插入和删除操作。常用的操作有在队头插入元素(appendleft)、在队头删除元素(popleft)、在队尾插入元素(append)、在队尾删除元素(pop)等。

示例:

from collections import deque

deque = deque()
deque.appendleft(1) # 在队头插入1
deque.append(2) # 在队尾插入2
deque.pop() # 在队尾删除2
deque.popleft() # 在队头删除1
  1. 集合(Set):一种无序、不重复的数据结构。常用的操作有添加元素(add)、删除元素(remove)、判断元素是否在集合中(in)等。

示例:

set1 = {1, 2, 3, 4}
set2 = {3, 4, 5, 6}
set3 = set1.union(set2) # 集合并,返回{1, 2, 3, 4, 5, 6}
set1.add(5) # 添加元素5,集合变为{1, 2, 3, 4, 5}
set2.remove(6) # 删除元素6,集合变为{3, 4, 5}
3 in set1 # 判断元素3是否在集合1中,返回True
  1. 列表(List):一种有序、可重复的数据结构。常用的操作有添加元素(append)、插入元素(insert)、删除元素(remove)等。

示例:

list1 = [1, 2, 3, 4]
list2 = [3, 4, 5, 6]
list3 = list1 + list2 # 列表合并,返回[1, 2, 3, 4, 3, 4, 5, 6]
list1.append(5) # 在列表1末尾添加元素5,列表变为[1, 2, 3, 4, 5]
list2.insert(0, 2) # 在列表2的第一个位置插入元素2,列表变为[2, 3, 4, 5, 6]
list1.remove(1) # 删除列表1中的元素1,列表变为[2, 3, 4, 5]
  1. 圆形缓冲区(Circular buffer):一种类似于队列的数据结构,但是在达到缓冲区最大容量时会覆盖掉最早加入的元素。常用的操作有添加元素(append)、获取最早加入的元素(oldest)等。

示例:

from collections import deque

cb = deque(maxlen=4)
cb.append(1) # 添加元素1
cb.append(2) # 添加元素2
cb.append(3) # 添加元素3
cb.append(4) # 添加元素4
cb.append(5) # 添加元素5,缓冲区已达到最大容量,覆盖了最早加入的元素1
cb[0] # 获取最早加入的元素,返回2
  1. 散列表(Hash table):一种以键值对存储数据的数据结构,可以快速查找、插入、删除数据。常用的操作有添加键值对(setitem)、获取键值对(getitem)、删除键值对(delitem)等。

示例:

hash_table = {}
hash_table['key1'] = 'value1' # 添加键值对
hash_table['key2'] = 'value2' # 添加键值对
hash_table['key3'] = 'value3' # 添加键值对
hash_table['key2'] = 'new_value2' # 修改键值对
hash_table.pop('key3') # 删除键值对
'key1' in hash_table # 判断键是否在散列表中,返回True
  1. 二叉树(Binary tree):一种每个节点最多有两个子节点的数据结构。常用的操作有插入节点(insert)、删除节点(delete)、查找节点(find)等。

示例:

class Node:
    def __init__(self, value):
        self.value = value
        self.left = None
        self.right = None
        
class BinaryTree:
    def __init__(self):
        self.root = None
    
    def insert(self, value):
        node = Node(value)
        if not self.root:
            self.root = node
        else:
            curr = self.root
            while True:
                if value < curr.value:
                    if not curr.left:
                        curr.left = node
                        break
                    else:
                        curr = curr.left
                else:
                    if not curr.right:
                        curr.right = node
                        break
                    else:
                        curr = curr.right
    
    def inorder_traversal(self, node, res):
        if node:
            self.inorder_traversal(node.left, res)
            res.append(node.value)
            self.inorder_traversal(node.right, res)
    
    def to_list(self):
        res = []
        self.inorder_traversal(self.root, res)
        return res

tree = BinaryTree()
tree.insert(5)
tree.insert(2)
tree.insert(7)
tree.to_list() # 返回[2, 5, 7]
  1. 堆(Heap):一种可以用来快速找到最大或最小值的完全二叉树。常用的操作有插入元素(heappush)、获取堆顶元素(heappop)、将列表转换成堆(heapify)等。

示例:

import heapq

heap = []
heapq.heappush(heap, 3) # 插入元素3
heapq.heappush(heap, 1) # 插入元素1
heapq.heappush(heap, 2) # 插入元素2
heapq.heappush(heap, 4) # 插入元素4
heapq.heappop(heap) # 弹出堆顶元素1
  1. 跳表(Skip list):一种以空间换时间的数据结构,可以快速查找、插入、删除数据。常用的操作有添加元素(insert)、获取元素(get)、删除元素(delete)等。

示例:

import random

class Node:
    def __init__(self, value=None, level=1):
        self.value = value
        self.forward = [None] * level
        
class SkipList:
    def __init__(self, max_level=4, p=0.5):
        self.max_level = max_level
        self.p = p
        self.head = Node()
        self.level = 1
        
    def random_level(self):
        level = 1
        while random.random() < self.p and level < self.max_level:
            level += 1
        return level
    
    def insert(self, value):
        level = self.random_level()
        node = Node(value, level)
        update = [self.head] * level
        curr = self.head
        for i in range(level-1, -1, -1):
            while curr.forward[i] and curr.forward[i].value < value:
                curr = curr.forward[i]
            update[i] = curr
        for i in range(level):
            node.forward[i] = update[i].forward[i]
            update[i].forward[i] = node
        if level > self.level:
            self.level = level
            
    def get(self, value):
        curr = self.head
        for i in range(self.level-1, -1, -1):
            while curr.forward[i] and curr.forward[i
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

trust Tomorrow

感谢支持!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值