以下是我用python刷算法的记录,记下来以便复习
1. 线性表
- 顺序表
# 创建顺序表
a = []
a = list()
# 在尾部插入元素x
a.append(x)
# 删除索引i的元素
a.pop(i)
- 链表
class linkNode():
def __init__(x, y)
self.val = x
self.next = y
- 堆栈
# 创建堆栈
s = []
# 压入元素
s.append(x)
# 弹出元素
s.pop()
# 判断是否为空
s
# 判断是否已满
len(s) < maxsize
- 先进先出队列
from queue import Queue
# 创建队列
q = Queue(100)
# 元素x入队
q.put(x)
# 队首元素出队
q.get()
# 判断队空,队空返回True
q.empty()
# 判断队满,队满返回True
q.full()
# 返回队列大小
q.qsize()
- 优先级队列
from queue import PriorityQueue
"""
PriorityQueue继承了Queue,改写了_put和_get方法,底层调用了heappush和heappop实现了优先级的管理
"""
# 创建队列
q = PriorityQueue(100)
# 元素x入队
q.put(x)
# 队首元素出队
q.get()
# 判断队空,队空返回True
q.empty()
# 判断队满,队满返回True
q.full()
# 返回队列大小
q.qsize()
- 元组(不可变列表)
a = ()
a = tuple()
2. 字典(哈希表)
# 创建字典
a = dict()
a = {}
# 插入元素,k表示键,v表示值
a[k] = v
# 取出元素
a[k]
a.get(k, default)
# 查看所有键
a.keys()
# 查看所有值
a.values()
# 查看所有键值对
a.items()
3. 集合
# 创建集合
a = set()
# 添加元素x
a.add(x)
# 删除元素x
a.remove(x)
# 集合a,b的交集
a & b
# 集合a,b的并集
a | b
4. 堆
import heapq
"""
heapq实现的是最小堆,将数组调整成堆的结构
"""
s = [3,1,4,2,6]
# 小根堆
# 将数组调整为小根堆
heapq.heapify(s) #=> s = [1, 2, 4, 3, 6]
# 弹出最小元素
heapq.heappop(s) #=> 1
# 插入元素0
heapq.heappush(s, 0) #=> s = [0, 2, 4, 6, 3]
# 弹出最小元素并插入1
heapq.heapreplace(s, 1) #=> s = [1, 2, 4, 6, 3]
# 大根堆
ns = [(-i, i) for i in s]
heapq.heapify(ns)
heapq.heappop(ns)[1] #=> 6
5. 排序
"""
sort是可变对象(字典、列表)的方法,在原地对序列进行排序,无返回值;
sorted是python的内置函数,需要传递排序对象作为参数,返回一个排序后的迭代器(不改变原数组);
"""
# sorted方法
# 对字典进行排序
dic = {'a':31, 'bc':5, 'c':3, 'asd':4, 'aa':74, 'd':0}
# 对字典按照值降序排列
sorted(dic.items(), key=lambda x: x[-1], reverse=True)
# [('aa', 74), ('a', 31), ('bc', 5), ('asd', 4), ('c', 3), ('d', 0)]
# 对字典按照键升序排列
sorted(dic.items(), key=lambda x: x[0], reverse=False)
[('a', 31), ('aa', 74), ('asd', 4), ('bc', 5), ('c', 3), ('d', 0)]
# sort
a = [3,4,2,1]
a.sort()