zoukankan      html  css  js  c++  java
  • 数据结构与算法目录

    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

    代码实现:

  • 相关阅读:
    unity工厂模式
    unity对象池
    unity进阶项目------保卫萝卜(2)
    C#状态机
    unity进阶项目------保卫萝卜(1)
    OpenGL——外部读档+异常报错
    OpenGL入门之入门
    xlua build时 报错处理
    捕鱼达人Demo版下载
    UGUI-Text——自适应
  • 原文地址:https://www.cnblogs.com/studybrother/p/11026753.html
Copyright © 2011-2022 走看看