博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python栈与队列的封装
阅读量:4159 次
发布时间:2019-05-26

本文共 3541 字,大约阅读时间需要 11 分钟。

项目案例一:栈的封装

在这里插入图片描述

  • 栈是限制在一端进行插入操作和删除操作的线性表(俗称堆栈),允许进行操作的一端称为“栈顶”,另一固定端称为“栈底”,当栈中没有元素时称为“空栈”。向一个栈内插入元素称为是进栈,push;从一个栈删除元素称为是出栈,pop。
  • 特点 :后进先出(LIFO)。
    在这里插入图片描述
    代码:
class Stack(object):    """栈的封装[1,2,3,4]"""    def __init__(self):        self.stack = []    def push(self,value):        """入栈"""        self.stack.append(value)        print(f"入栈元素是{value}")    def pop(self):        """出栈"""        if self.is_empty():            raise Exception('栈为空')        item = self.stack.pop()        print(f"出栈元素是{item}")        return item    def is_empty(self):        """判断栈是否为空"""        return len(self.stack) == 0    def top(self):        """返回栈顶元素"""        if self.is_empty():            raise Exception('栈为空')        return self.stack[-1]    def __len__(self):        """魔术方法,len(object)自动执行的方法"""        return len(self.stack)if __name__ == '__main__':    stack = Stack()    stack.push(1)    stack.push(2)    stack.push(3)    print(len(stack))    stack.pop()    print(stack.is_empty())    print(stack.top())

代码运行结果:

在这里插入图片描述

项目案例: 队列的封装

  • 队列是限制在一端进行插入操作和另一端删除操作的线性表,允许进行插入操作的一端称为“队尾”,允许进行删除操作的一端称为“队头”
    ,当队列中没有元素时称为“空队”。
  • 特点 :先进先出(FIFO)。

在这里插入图片描述

在这里插入图片描述

class Queue(object):    """队列的封装[1,2,3,4]    1.列表的左侧为队尾    2.列表的右侧为队头    """    def __init__(self):        self.queue = []    def enqueue(self,value):        """入队"""        self.queue.insert(0,value)        print(f"入队元素是{value}")    def dequeue(self):        """出队"""        if self.is_empty():            raise Exception('队列为空')        item = self.queue.pop()        print("出队元素为{item}")        return item    def __len__(self):        """获取队列的长度"""        return len(self.queue)    def first(self):        """返回队头元素"""        if self.is_empty():            raise Exception('队列为空')        return self.queue[-1]    def is_empty(self):        """判断栈是否为空"""        return len(self.queue) == 0    def last(self):        """获取队尾元素"""        if self.is_empty():            raise Exception('队列为空')        return self.queue[0]if __name__ == '__main__':    queue = Queue()    queue.enqueue(1)    queue.enqueue(2)    queue.enqueue(3)    print(queue.is_empty())    queue.dequeue()    print(queue.first())    print(queue.last())

代码运行结果:

在这里插入图片描述

项目案例:二叉树的封装

参考博客:

二叉树是树的特殊一种,具有如下特点:1、每个结点最多有两颗子树,结点的度最大为2。2、左子树和右子树是有顺序的,次序不能颠倒。3、即使某结点只有一个子树,也要区分左右子树。

在这里插入图片描述

"""二叉树:"""class Node(object):    """节点类"""    def __init__(self, val=None, left=None, right=None):        self.val = val        self.left = left        self.right = rightclass BinaryTree(object):    """封装二叉树"""    def __init__(self, root):        self.root = root    def pre_travel(self, root):        """先序遍历: 根左右"""        if (root != None):            print(root.val)            self.pre_travel(root.left)            self.pre_travel(root.right)    def in_travel(self, root):        """中序遍历: 左根右"""        if (root != None):            self.in_travel(root.left)            print(root.val)            self.in_travel(root.right)    def last_travel(self, root):        """后序遍历: 左右根"""        if (root != None):            self.last_travel(root.left)            self.last_travel(root.right)            print(root.val)if __name__ == '__main__':    node1 = Node(1)    node2 = Node(2)    node3 = Node(3)    node4 = Node(4)    node5 = Node(5)    node6 = Node(6)    node7 = Node(7)    node8 = Node(8)    node9 = Node(9)    node10 = Node(10)    bt = BinaryTree(root=node1)    node1.left = node2    node1.right = node3    node2.left = node4    node2.right= node5    node3.left = node6    node3.right = node7    node4.left = node8    node4.right = node9    node5.left = node10    # 先序遍历    bt.pre_travel(node1)

遍历结果:

在这里插入图片描述

转载地址:http://rhjxi.baihongyu.com/

你可能感兴趣的文章
sqlite3的helloworld
查看>>
MFC下支持中文的SQLite3封装类使用
查看>>
简单高效的多线程日志类
查看>>
研华USB4711A采集卡高速中断模式采集总结
查看>>
从零起步CMFCToolBar用法详解
查看>>
CMFCRibbonStatusBar用法
查看>>
CMFCControlRendererInfo类的参数
查看>>
史上最详细MFC调用mapX5.02.26步骤(附地图测试GST文件)
查看>>
CMFCShellListCtrl使用方法
查看>>
mapnik的demo运行
查看>>
python支持下的mapnik安装
查看>>
milvus手册
查看>>
多目标跟踪的简单理解
查看>>
Near-Online Multi-target Tracking with Aggregated Local Flow Descriptor
查看>>
Joint Tracking and Segmentation of Multiple Targets
查看>>
Subgraph Decomposition for Multi-Target Tracking
查看>>
JOTS: Joint Online Tracking and Segmentation
查看>>
CDT: Cooperative Detection and Tracking for Tracing Multiple Objects in Video Sequences
查看>>
Improving Multi-frame Data Association with Sparse Representations for Robust Near-online Multi-ob
查看>>
Virtual Worlds as Proxy for Multi-Object Tracking Analysis
查看>>