【Python19】栈的封装、队列的封装、二叉树的封装

1. 栈 stack


栈是限制在一端进行插入操作和删除操作的线性表(俗称堆栈),允许进行操作的一端称为“栈顶”,另一固定端称为“栈底”,当栈中没有元素时称为“空栈”。向一个栈内插入元素称为是进栈(push);
从一个栈删除元素称为是出栈(pop)

  • 特点 :后进先出(Last In First Out / LIFO)

1.1 栈的方法


push:将数据入栈;

pop:删除并返回栈顶元素(此方法会修改栈)

peek:返回栈顶元素,但不修改栈

size:查看栈内的数据个数

isEmpty:判断栈内是否为空

isString:将栈内的数据转化为字符串输出

clear:清空栈


1.2 栈的封装


class Stack(object):
    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):
        return  len(self.stack)
if __name__ == '__main__':
    stack = Stack()
    stack.push(1)
    stack.push(2)
    stack.push(3)
    print(f'长度为:{len(stack)}')
    stack.pop()
    print(stack.is_empty())
    print(f'栈顶元素:{stack.top()}')
执行结果:
入栈元素为1
入栈元素为2
入栈元素为3
长度为:3
出栈元素为3
False
栈顶元素:2

2. 队列 queue


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

  • 特点 :先进先出(FIFO)

在这里插入图片描述

队列的封装


class Queue(object):
    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(f'出队列元素为{item}')
    def is_empty(self): # 判断空
        return len(self.queue)==0
    def __len__(self): #长度
        return len(self.queue)
    def first(self): #队首
        if self.is_empty():
            raise Exception("队列为空")
        return self.queue[-1]
    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(f'长度:{len(queue)}')
    queue.dequeue()
    print(queue.is_empty())
    print(f'队头:{queue.first()}')
    print(f'队尾:{queue.last()}')
执行结果:
入队列元素为1
入队列元素为2
入队列元素为3
长度:3
出队列元素为1
False
队头:2
队尾:3

3. 二叉树 binaryTree


3.1 简介


二叉树是树的特殊一种,具有如下特点:

  • 每个结点最多有两颗子树,结点的度最大为2。
  • 左子树和右子树是有顺序的,次序不能颠倒。
  • 即使某结点只有一个子树,也要区分左右子树

3.2 一般二叉树的性质


1、在非空二叉树的i层上,至多有2i-1个节点(i>=1)。通过归纳法论证。

2、在深度为K的二叉树上最多有2k-1个结点(k>=1)。通过归纳法论证。

3、对于任何一棵非空的二叉树,如果叶节点个数为n0,度数为2的节点个数为n2,则有: n0 = n2 + 1

在一棵二叉树中,除了叶子结点(度为0)之外,就剩下度为2(n2)和1(n1)的结点了。则树的结点总数为T = n0+n1+n2;在二叉树中结点总数为T,而连线数为T-1,所以有:n0+n1+n2-1 = 2*n2 +n1;最后得到n0 = n2+1;


3.3 二叉树的封装


在这里插入图片描述

"""定义节点类"""
class Node(object):
    def __init__(self, val=None, left=None, right=None):
        self.val = val
        self.left = left
        self.right = right
"""封装二叉树"""
class 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)

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
C语言二叉树队列实验是一个经典且重要的实验项目。这个项目的目的是掌握二叉树队列的基本概念和操作。 首先,二叉树是一种常见的数据结构,它由节点组成,每个节点最多有两个子节点。树的根节点没有父节点,而其他节点有且仅有一个父节点。二叉树可以用于解决许多实际问题,比如表示层次结构、搜索和排序等。 在二叉树的实验中,我们需要实现一些基本的操作,如创建树、插入节点、搜索节点、删除节点等。我们可以使用递归或迭代的方法来实现这些操作。此外,还可以使用前序、中序或后序遍历二叉树,以及层次遍历等方法来访问树中的节点。 其次,是一个后进先出(LIFO)的数据结构。通过,我们可以实现某些算法和数据结构,比如深度优先搜索、中缀转后缀表达式等。在的实验中,我们需要实现一些基本的操作,如入、出、判断空或满等。 最后,队列是一个先进先出(FIFO)的数据结构。通过队列,我们可以实现某些算法和数据结构,比如广度优先搜索、消息传递等。在队列的实验中,我们需要实现一些基本的操作,如入队、出队、判断队空或队满等。 总之,C语言二叉树队列实验是一个很好的练习项目,可以加强我们对这些基本数据结构的理解和使用。通过完成这个实验,我们可以提高我们的编程技能,并在以后的编程实践中更好地应用这些知识。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值