数据结构与算法目录
1.数据结构&算法的引言+时间复杂度
2.python数据结构的性能分析
3.基本数据结构-栈
4.基本数据结构-队列
5.队列的应用案例-烫手的山芋
6.基本数据结构-双端队列(Deque)
7.Deque的应用案例-回文检查
8.基本数据结构-顺序表和链表
9算法之顺序,二分,hash查找
10.排序
11.二叉树
重点中的重点:单链表
重点题目:下列哪些是数据结构:列表,元组,字典,字符串不是
1.链表是一种数据结构:节点和链表(抽象的数据结构)
思考:如何封装节点?2个基本属性写在构造方法中
链表数据结构的封装:
-节点(Node):
class Node():
def __init__(self,item):
self.item=item
self.next=None
链表(Link):
class Link():
def __init__(self):
self._head=None
链表:(1)存储第一个节点的属性head
(2)将每个节点串联起来
next用来指向下一个节点
2.二叉树是一种特殊的链表(比列表多了指向和引用):
每个节点:包括三个部分,其中包括一个数据块和left和right
目的:对数据进行组织和串联
二叉树基本概念:
(1)根节点
(2)左叶子节点
(3)有叶子节点
(4)子树
链表代码:
链表数据结构的封装: -节点(Node): class Node(): def __init__(self,item): self.item=item self.next=None 链表(Link): class Link(): def __init__(self): self._head=None
二叉树代码初步:
class Node():
def __init__(self,item):
self.item=item
self.left=None
self.right=None
class Tree():
#构造方法可以构造一个空树
node=Node(item)
#判断树为空
if self.root=None:
self.root=node
return
#树为非空的插入操作
#add插入节点数据,并且串联数据
思考上图:插入这个问号?应该先考虑插入的位置,再考虑插入这个数据
(1)查看第一层,以此类推
(2)查看左右叶子节点是否为空
思考:如何将学到的知识应用?也就是编程的思想
我们需要从root,一层一层进行遍历
如何插入呢?可以将节点放在列表中,删除PoP这个1节点
(1)
(2)
二叉树的插入思想(先进先出的队列思想有用到):
1.先将根节点放在列表中,再删除
2.判断左右两个儿子节点是否为空,不为空,就放在列表中,再删除pop
3.判断孙子节点是否为空,不为空,则再将孙子节点放在列表中,再删除pop
4.依次类推
思路整理:
如何写出这个程序呢?对二叉树的插入
class Node(): def __init__(self,item): self.item=item self.left=None self.right=None class Tree():
def __init(self):
self.root=None
def add(self,item): #构造方法可以构造一个空树 node=Node(item) #判断树为空 if self.root=None: self.root=node return #树为非空的插入操作,add插入节点数据,并且串联数据
queue=[self.root]
while queue:
cur=queue.pop(0)
if cur.left==None:
cur.left=node
return
else:
queue.append(cur.left)
if cur.right==None:
cur.right=node
return
else:
queue.append(cur.right)
#广度遍历,也就是一行一行的遍历
def travel(self):
if self.root is None:
print('')
return
else:
queue = [self.root]
while queue:
cur = queue.pop(0)
print(cur.item)
if cur.left is not None:
queue.append(cur.left)
if cur.right is not None:
queue.append(cur.right)
知道多少次循环,用for循环,不知道多少次循环,用while循环
条件:列表是否为空
travel是一层一层遍历打印
二叉树遍历
广度遍历:层级遍历
深度遍历:前序:根左右
中序:左根右
后序:左右根
前序:1 2 4 8 9 5 10 3 6 7
中序:8 4 9 2 10 5 1 6 3 7
后序:8 9 4 10 5 2 6 7 3 1
代码实现: