zoukankan      html  css  js  c++  java
  • 常用数据结构

    常用数据结构

    class Stock():
        def __init__(self):
            self.items = []
        def add(self,item):
            self.items.append(item)
        def pop(self):
            return self.items.pop()
        def size(self):
            return len(self.items)
        def isEmtpy(self):
            return self.items == []
        def peek(self):
            return len(self.items) -1
    

    队列

    class Queue():
        def __init__(self):
            self.items = []
    
        def enqueue(self, item):
            self.items.insert(0, item)
    
        def dequeue(self):
            return self.items.pop()
    
        def size(self):
            return len(self.items)
    
        def isEmtpy(self):
            return self.items == []
    

    单链表

    
    class Node():
        def __init__(self, item):
            self.item = item
            self.next = None
    
    
    class Link():
        def __init__(self):
            self._head = None
    
        def add(self, item):
            node = Node(item)
            node.next = self._head
            self._head = node
    
        def travel(self):
            cur = self._head
            while cur:
                print(cur.item)
                cur = cur.next
    
        def length(self):
            count = 0
            cur = self._head
            while cur:
                count += 1
                cur = cur.next
            return count
    
        def isEmpty(self):
            return self._head == None
    
        def search(self, item):
            cur = self._head
            find = False
            while cur:
                if cur.item == item:
                    find = True
                    return
                else:
                    cur = cur.next
            return find
    
        def append(self, item):
            node = Node(item)
            cur = self._head
            if self._head == None:
                self._head = node
                return
            pre = None
            while cur:
                pre = cur
                cur = cur.next
            pre.next = node
    
        def insert(self, pos, item):
            node = Node(item)
            if pos == 0:
                node.next = self._head
                self._head = node
                return
            cur = self._head
            pre = None
            for i in range(pos):
                pre = cur
                cur = cur.next
            pre.next = node
            node.next = cur
    
        def remove(self, item):
            cur = self._head
            pre = None
            if cur.item == item:
                self._head = cur.next
                return
            while True:
                pre = cur
                cur = cur.next
                if cur.item == item:
                    pre.next = cur.next
                    break
                elif cur == None:
                    break
    
        def reverse(self):
            cur = self._head
            pre = None
            cur_next = cur.next
    
            while cur:
                cur.next = pre
                pre = cur
                cur = cur_next
                if cur != None:
                    cur_next = cur_next.next
            self._head = pre
    

    二叉树

    # 封装节点
    class Node():
        def __init__(self,item):
            self.item = item
            self.left = None  # 左节点
            self.right = None  #  右节点
    
    class Tree():
        def __init__(self): # 构建一个空树
            self.root = None
        def addNode(self,item):
            node = Node(item)
            
            # 如果树为空:
            if self.root == None:
                self.root = node
                return
            
            # 树为非空
            cur = self.root
            q_list = [cur]
            
            while True:
                first_item = q_list.pop(0)
                if first_item.left != None: 
                    # 判断取出节点的左节点是否为空 不为空假如到列表
                    q_list.append(first_item.left)
                else:
                    first_item.left = node
                    break
    
                # 判断右叶子节点是否为空
                if first_item.right != None:
                    q_list.append(first_item.right)
                else:
                    first_item.right = node
                    break
            
        def travel(self):
            cur = self.root
            q_list = [cur]
            while q_list:
                first_item = q_list.pop(0)
                print(first_item.item)
                if first_item.left != None:
                    q_list.append(first_item.left)
                if first_item.right != None:
                    q_list.append(first_item.right)
        
    

    二叉树遍历

    • 广度遍历
      • 逐层遍历,横向遍历。
    • 深度遍历:竖向遍历,需要作用在二叉树的每一颗子树
      • 前序:根左右
      • 中序:左根右
      • 后序:左右根
    class Node():
        def __init__(self,item):
            self.item = item
            self.left = None  # 左节点
            self.right = None  #  右节点
    
    class Tree():
        def __init__(self): # 构建一个空树
            self.root = None
        def addNode(self,item):
            node = Node(item)
            
            # 如果树为空:
            if self.root == None:
                self.root = node
                return
            
            # 树为非空
            cur = self.root
            q_list = [cur]
            
            while True:
                first_item = q_list.pop(0)
                if first_item.left != None: 
                    # 判断取出节点的左节点是否为空 不为空假如到列表
                    q_list.append(first_item.left)
                else:
                    first_item.left = node
                    break
    
                # 判断右叶子节点是否为空
                if first_item.right != None:
                    q_list.append(first_item.right)
                else:
                    first_item.right = node
                    break
        def forward(self, root): 
            # 将根左右作用在每一颗子树中,子树和子树是基于区分
            # 参数root是子树的根节点
            # 设计一个结束递归的结束条件
            if root == None:
                return
            print(root.item)
            self.forward(root.left)
            self.forward(root.right)
        def middle(self,root):
            if root == None:
                return
            self.middle(root.left)
            print(root.item)
            self.middle(root.right)
        def back(self,root):
            if root == None:
                return
            self.back(root.left)
            self.back(root.right)
            print(root.item)
    

    排序二叉树

    class Node():
        def __init__(self,item):
            self.item = item
            self.left = None  # 左节点
            self.right = None  #  右节点
    
    # 封装排序二叉树
    class SortTree():
        def __init__(self):
            self.root = None
        def add(self,item):
            node = Node(item)
            # 树为空
            if self.root == None:
                self.root = node
                return
            # 树为非空
            cur = self.root
            while True:
                if cur.item < item:
                    # 插入节点值大于根节点,将节点插入到根节点右侧
                    if cur.right == None:
                        cur.right = node
                        break
                    else:
                        cur = cur.right
                else:
                    # 将节点插入到节点左侧
                    if cur.left == None:
                        cur.left = node
                        break
                    else:
                        cur = cur.left
        def middle(self,root):
            if root == None:
                return
            self.middle(root.left)
            print(root.item)
            self.middle(root.right)
    
  • 相关阅读:
    《ASP.NET Core 高性能系列》致敬伟大的.NET斗士甲骨文!
    ThreadLocal<T>的是否有设计问题
    从.NET和Java之争谈IT这个行业
    自建型呼叫中心
    托管型呼叫中心
    数字语音记录仪3.0
    模拟电话录音系统2.0
    easyui-combobox 下拉菜单 多选 multiple
    利用easyui-combotree实现 下拉菜单 多选功能(带多选框)
    eclipse项目导入 idea中
  • 原文地址:https://www.cnblogs.com/Gin1/p/13645490.html
Copyright © 2011-2022 走看看