顺序表:
增加元素:①表尾,②表中(不保序),③表中(保序)
删除元素:①表尾,②表中(不保序),③表中(保序)
顺序表扩充的两种策略:
①每次扩充增加固定数目的存储位置,扩充增加10个元素位置
节省空间,操作次数多
②每次扩充容量加倍,扩充增加一倍存储空间
减少了扩充次数,浪费空间资源。以空间换时间
链表:
单向链表:
length() 链表长度
travel() 遍历整个链表
add(item) 链表头部添加元素
append(item) 链表尾部添加元素
insert(pos, item) 指定位置添加元素
remove(item) 删除节点
search(item) 查找节点是否存在
插入:
头部插入
head -> new.p
new.next -> node
尾部加入:
node.next -> new
new.next -> null(空)
中间插入:
① 判断
② 前节点.next -> new
③ new.next -> 后节点
删除:
头删除:
head -> node2
中间删除:
① 判断
② node.next -> node2
双向链表:
由前驱节点和后继节点组成
头部加入add
尾部加入append
中间插入insert
删除remove
栈:
后进后出,压入式
加入数据(push)和输出数据(pop)
队列:
队列是只允许在一端进行插入操作,而在另一端进行删除操作的线性表
特殊:双端队列,是一种具有队列和栈的性质的数据结构
栈和队列的区别:
①栈后进先出,队列先进先出
②栈是删除/插入在同一段,队列是在两端进行的
③栈只允许尾部删除/插入,队列只允许表尾插入,表头删除
相同点:①线性表结构②插入在尾部③复杂度一样O(1)
串:
序列串
树:
二叉树,哈夫曼数,完整二叉树
遍历(先序,中序,后序)
先序:根,根左节点,根右节点
中序:根左节点,根,根右节点
后序:根左节点,根右节点,根
#先序
def xianxu(root):
if root is None :
return
print(root.date,end='')
xianxu(root.left-child)
xianxu(root.right-child)
#中序
def zhongxu(root):
if root is None :
return
zhongxu(root.left-child)
print(root.date,end='')
zhongxu(root.right-child)
#后序
def houxu(root):
if root is None :
return
houxu(root.left-child)
houxu(root.right-child)
print(root.date,end='')
图:
最广,最深