python面向对象编程案例:栈与队列的封装

项目案例: 栈与队列的封装

1.封装栈的数据结构

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

根据列表的数据结构封装栈的数据结构具体程序如下:

class Stack(object):
    """
    根据列表的数据结构封装栈的数据结构
    """
    # 构造方法
    def __init__(self):
        # 定义一个空栈, 用来存储栈的元素
        self.__stack = [ ]

    # len(stackobj)自动会调用该方法
    def __len__(self):
        return  len(self.__stack)
    def push(self, item):
        """入栈"""
        self.__stack.append(item)
        print("元素[%s]入栈成功" % (item))

    def pop(self):
        """出栈, 判断栈是否为空"""
        if not self.is_empty():
            # 获取出栈的元素
            item = self.__stack.pop()
            print("元素[%s]出栈成功" % (item))
        else:
            raise Exception("栈为空")

    def top(self):
        """获取栈顶元素"""
        if not self.is_empty():
            # 获取出栈的元素
            item = self.__stack[-1]
            print("栈顶元素为: [%s] " % (item))
        else:
            raise Exception("栈为空")

    def length(self):
        """获取栈的元素个数"""
        return len(self.__stack)

    def is_empty(self):
        """判断栈是否为空"""
        return len(self.__stack) == 0

stack = Stack()
stack.push(5)
print(len(stack))
stack.push(3)
stack.pop()
stack.is_empty()
stack.pop()
stack.is_empty()
print(len(stack))

具体的操作和返回值如下表,可对照下表执行操作,检验栈的的封装是否成功:


 2.封装队列的数据结构

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

根据列表的数据结构封装队列的数据结构具体程序如下:

class Queue(object):
    def __init__(self):
        self.__queue = []

    def __len__(self):
        return len(self.__queue)

    def enqueue(self, item):
        self.__queue.append(item)
        print("元素[%s]进队成功" %(item))

    def is_empty(self):
        if len(self.__queue) == 0:
            return True
        else:
            return False

    def dequeue(self):
        if not self.is_empty():
            item = self.__queue[0]
            self.__queue.remove(item)
            print("元素[%s]出队成功" %(item))
        else:
            raise Exception("对列为空!")

    def first(self):
        if not self.is_empty():
            item = self.__queue[0]
            print("队列的队头为[%s]" %(item))
        else:
            raise Exception("对列为空!")

queue = Queue()
queue.enqueue(5)
queue.enqueue(3)
print(len(queue))
queue.dequeue()
print(queue.is_empty())
queue.dequeue()
print(queue.is_empty())

运行结果如下所示:

具体的操作和返回值如下表,也可对照下表执行操作,检验队列的的封装是否成功: 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值