数据结构与算法目录

匿名 (未验证) 提交于 2019-12-02 23:43:01

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用来指向下一个节点

每个节点:包括三个部分,其中包括一个数据块和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=Noneclass Tree():  #构造方法可以构造一个空树  node=Node(item)  #判断树为空  if self.root=None:    self.root=node    return  #树为非空的插入操作  #add插入节点数据,并且串联数据

思考上图:插入这个问号?应该先考虑插入的位置,再考虑插入这个数据

(1)查看第一层,以此类推

(2)查看左右叶子节点是否为空

思考:如何将学到的知识应用?也就是编程的思想

我们需要从root,一层一层进行遍历

如何插入呢?可以将节点放在列表中,删除PoP这个1节点

(1)

(2)

二叉树的插入思想(先进先出的队列思想有用到):

1.先将根节点放在列表中,再删除

2.判断左右两个儿子节点是否为空,不为空,就放在列表中,再删除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循环

条件:列表是否为空

二叉树遍历  广度遍历:层级遍历  深度遍历:前序:根左右       中序:左根右       后序:左右根

前序:1 2 4 8 9 5 10 3 6 7

后序:8 9 4 10 5 2 6 7 3 1

代码实现:

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!