【数据结构学习】队列与栈

栈与队列理论基础——基于python

1、基本特性

队列:先进先出
栈:先进后出
在这里插入图片描述

2、思考

  1. C++中stack 是容器么?
  2. 我们使用的stack是属于哪个版本的STL?
  3. 我们使用的STL中stack是如何实现的?
  4. stack提供迭代器来遍历stack空间么?

在python中的使用参考:Python数据结构之栈和队列的实现(详细无敌版!!!!)

2.1 数据容器

在常用的数据结构中,有一批结构被称为容器,一个容器结构里总包含一组其它类型的数据对象,称为其元素,支持对这些元素的存储、管理和使用。一类容器具有相同性质,支持同一组操作,可以被定义为一个抽象的数据类型
最常用的数据容器即为:栈(stack)和队列(queue)

2.2 堆

(1)定义

先进后出,后进先出,并且只能在栈顶进出
在这里插入图片描述

(2)实现

顺序栈:用顺序表实现的栈
链式栈:用链表实现的栈
顺序栈的实现相对简单,因为对于栈的操作可以通过对顺序表的操作方法实现,不用自己定义,直接调用即可,相对简单
栈相当于一个类,实现栈的过程为方法,具体操作有判空操作、添加元素操作、弹出栈顶元素操作、返回栈顶元素操作、求栈长度操作、遍历操作等等

class Stack(object):
    """栈,使用顺序表实现"""

    def __init__(self):
        """定义空栈"""
        self.__items = []

    def is_empty(self):
        """判断栈是否为空"""
        return self.__items == []

    def push(self, item):
        """添加一个新元素item到栈顶"""
        self.__items.append(item)

    def pop(self):
        """弹出栈顶元素,有返回值"""
        return self.__items.pop()

    def peek(self):
        """返回栈顶元素,有返回值"""
        # 判断栈是否为空
        if self.is_empty():
            return None
        else:
            return self.__items[-1]

    def size(self):
        """返回栈中的元素个数"""
        return len(self.__items)

    def travel(self):
        """遍历栈中的元素"""
        for item in self.__items:
            print(item)


if __name__ == '__main__':
    s = Stack()
    s.push(7)
    s.push(8)
    s.push(9)
    s.pop()
    print(s.size())
    print(s.is_empty())
    print(s.peek())
    s.travel()

得到测试结果:

2
False
8
7
8

应用:浏览器的前进与后退

2.3 队列

(1)定义

先进先出!
操作:
入队enqueue:放一个数据到队列尾部
出队dequeue:从队列头部取一个元素

队列也是一种操作受限制的线性表数据结构

(2)实现

使用顺序表list来实现
相关操作与list操作相关
队列相当于一个类,实现队列的过程为方法,具体操作有判空操作、添加元素操作、弹出元素操作、求队列长度操作、遍历操作等等,实现如下:

class Queue(object):
    def __init__(self):
        """初始化,即定义一个空队列"""
        self.__items = []

    def is_empty(self):
        """判空操作,判断队列是否为空"""
        return self.__items == []

    def enqueue(self, item):
        """向队列中添加新元素"""
        self.__items.append(item)

    def dequeue(self):
        """返回队列中的第一个元素"""
        return self.__items.pop(0)

    def size(self):
        """返回队列中的元素个数"""
        return len(self.__items)

    def travel(self):
        """遍历队列中的元素"""
        for item in self.__items:
            print(item)


if __name__ == '__main__':
    q = Queue()
    print(q.is_empty())
    q.enqueue(7)
    q.enqueue(8)
    q.enqueue(9)
    print(q.is_empty())
    print(q.size())
    print(q.dequeue())
    q.dequeue()
    q.travel()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值