概念

栈是一种线性的数据结构,FILO(先进后出)的操作,可以用顺序表实现,也可以用链表来实现。想象成一个杯子,只能往上面倒水进去,把水倒出去的时候,上面的先出来。

操作

栈的基本操作包含:

stack():创建空的栈

push():入栈

pop():出栈

peek():返回栈顶元素

is_empty():判断是否为空栈

size():返回栈的元素个数

代码实现

通过列表list的操作来实现栈的先进后出方式

class Stack(object):

"""Stack"""

def __init__(self):

self.__list = []

def push(self, item):

# 添加元素到栈顶

self.__list.append(item)

def pop(self):

# 弹出栈顶元素

return self.__list.pop()

def peek(self):

# 返回栈顶元素

# 需要判断是否为空列表

if self.__list:

return self.__list[-1]

else:

return None

def size(self):

# 返回栈的元素个数

return len(self.__list)

def is_empty(self):

# 判断是否为空

# 空列表返回真

return self.__list == []

# 如果是空列表,布尔值为F,取反变成T

# return not self.__list

if __name__ == "__main__":

s = Stack()

s.push(1)

s.push(2)

s.push(3)

s.push(4)

s.push(5)

print(s.pop())

print(s.pop())

print(s.pop())

print(s.pop())

print(s.pop())

观察结果:进入的顺序是12345,出来的顺序是54321

image.png

队列

概念

队列queue也是一种线性结构,方式是先进先出FIFO, 想象成一支队伍。

允许插入数据的一端:队尾

允许删除的一端:队头

假设队列

,则

是队头元素,

是队尾元素。删除从

开始,添加从

开始

操作

几个重要的操作

enqueue():插入元素

dequeue():删除元素

is_empty():判断是否为空

size():返回元素个数

代码实现

class Queue(object):

# Queue

def __init__(self):

self.__list = []

def enqueue(self, item):

# 添加元素:append默认是添加到末尾

self.__list.append(item)

# self.__list.append(0, item)

def dequeue(self):

# 从队列头部删除元素:pop默认是末尾

return self.__list.pop(0)

# return self.__list.pop()

def is_empty(self):

# 判断是否为空

return self._list == []

def size(self):

# 返回个数

return len(self.__list)

if __name__ == "__main__":

q = Queue()

q.enqueue(1)

q.enqueue(2)

q.enqueue(3)

q.enqueue(4)

q.enqueue(5)

print(q.dequeue())

print(q.dequeue())

print(q.dequeue())

print(q.dequeue())

print(q.dequeue())

image.png

双端队列

概念

能够在队头和队尾同时进行插入和删除操作的队列。操作的规则类似栈的先进后出。

代码实现

# coding: utf-8

# 双端队列

class Dueue(object):

# Doublequeue

# 构造函数,用来定义私有化属性

def __init__(self):

self.__list = []

def add_front(self, item):

# 添加元素:append默认是添加到末尾;也可以指定位置

# 双端队列中哪里添加就在哪里删除

self.__list.insert(0, item)

# self.__list.append(0, item)

def add_rear(self, item):

# 从队列头部删除元素:pop默认是末尾

self.__list.append(item)

def pop_front(self):

# 头部删除

return self.__list.pop(0)

def pop_rear(self):

# 尾部删除

return self.__list.pop()

def is_empty(self):

# 判断是否为空

return self._list == []

def size(self):

# 返回个数

return len(self.__list)

if __name__ == "__main__":

q = Dueue()

# 头部插入

q.add_front(1)

q.add_front(2)

q.add_front(3)

# 尾部删除

q.add_rear(4)

q.add_rear(5)

q.add_rear(6)

# 同步删除

print(q.pop_front())

print(q.pop_front())

print(q.pop_front())

# 尾部删除

print(q.pop_rear())

print(q.pop_rear())

print(q.pop_rear())

image.png

python1234出栈_Python数据结构与算法3——栈和队列相关推荐

  1. python 栈_Python数据结构与算法05:基本结构:栈的应用之括号匹配

    注:本文如涉及到代码,均经过Python 3.7实际运行检验,保证其严谨性. 本文阅读时间约为7分钟. 算法流程 括号匹配情况介绍 我们经常会遇到类似(9-1)*(8+7)/(4-2).print(& ...

  2. 数据结构与算法之栈入门题目

    数据结构与算法之栈题目 目录 用数组实现大小固定的队列和栈 实现一个特殊的栈,在实现栈的基础功能上,再实现返回栈中最小元素的操作 如果仅用栈结构实现队列结构和如何仅用队列结构实现栈结构 1. 用数组实 ...

  3. 数据结构与算法--利用栈实现队列

    利用栈实现队列 上一节中说明了栈的特点 后进先出,我们用数组的方式实现了栈的基本操作api,因此我们对栈的操作是不考虑排序的,每个api的操作基本都是O(1)的世界,因为不考虑顺序,所以找最大,最小值 ...

  4. 数据结构与算法--简单栈实现及其应用

    栈 栈(Stack)是一种限制插入和删除只能在一个位置上进行的表,改位置是表的末端,叫做栈顶top.栈的基本操作有push (进栈)pop(出栈) 栈又叫做LIFO(后进先出)表,下图展示普通push ...

  5. C++数据结构和算法2 栈 双端/队列 冒泡选择插入归并快排 二三分查找 二叉树 二叉搜索树 贪婪 分治 动态规划

    C++数据结构和算法2 栈 双端/队列 冒泡选择插入归并快排 二三分查找 二叉树 二叉搜索树 贪婪 分治 动态规划 博文末尾支持二维码赞赏哦 _ github 章3 Stack栈 和 队列Queue= ...

  6. 新星计划Day7【数据结构与算法】 栈Part1

    新星计划Day7[数据结构与算法] 栈Part1

  7. 04_JavaScript数据结构与算法(四)队列

    JavaScript 数据结构与算法(四)队列 认识队列 队列(Queue)是一种运算受限的线性表,特点:先进先出.(FIFO:First In First Out) 受限之处: 只允许在表的前端(f ...

  8. 数据结构与算法(C++)– 队列(Queue)

    数据结构与算法(C++)– 队列(Queue) 1.队列 先进先出(First in, First out) enqueue 入队,dequeue 出队 front 队头,rear / back 队尾 ...

  9. 数据结构与算法之猫狗队列

    数据结构与算法之猫狗队列 目录 猫狗队列 1. 猫狗队列 描述 代码实现 import java.util.LinkedList; import java.util.Queue;public clas ...

最新文章

  1. 光耦p621引脚图_开关电源中光耦电路的设计与优点
  2. java-jwt这个库没用过吧?
  3. (第十一周)考试系统测试报告
  4. 使用Arthas 获取Spring ApplicationContext还原问题现场
  5. quartus 修改 时钟_Clock Quartus II 开发的多功能数字时钟,有计时、调 闹铃、警报等 Other systems 其他 274万源代码下载- www.pudn.com...
  6. 爬虫的步骤解析内容xpath介绍_爬虫入门到精通-网页的解析(xpath)
  7. devStack安装OpenStack Ocata版本 (Linux Bridge+VLAN)
  8. Qt之QNetworkInterface
  9. java实现客服转接_Java微信公众平台开发(9) 关键字回复以及客服接口实现
  10. iOS语言中的代理模式
  11. 详解研发健康体检信息管理系统分析
  12. 中奖人js滚动效果_H5实现中奖记录逐行滚动切换效果
  13. pom.xml文件中的dependency的scope属性值为test,但是Test sources root的文件里面不能使用
  14. 项目中用jbarcode生成条形码,并进行特定的格式打印标签纸(完成步骤):(得力,斑马打印机都能使
  15. TypeError: Converting circular structure to JSON
  16. 索尼 a7 IV 和佳能 EOS R6 哪个好
  17. Java编写数据统计程序_个人项目--wc文本统计程序(Java实现)
  18. IBM赌未来:量子计算服务IBM Q系统今年上线
  19. 网吧服务器点歌系统,网吧点歌系统_网吧语音大师_蓝宝石语音_网吧点歌系统_蓝宝石呼叫网管_hylbs.com...
  20. Java 8新特性学习

热门文章

  1. linux过滤文件的关键字,linux tail 过滤日志文件中的关键字
  2. N个Linux耍酷命令,手把手教你如何技术撩妹!
  3. 京东面试题:ElasticSearch深度分页解决方案
  4. lambda 对象去重_采用java8 lambda表达式 实现 java list 交集 并集 差集 去重复并集...
  5. java函数式编程归约reduce概念原理 stream reduce方法详解 reduce三个参数的reduce方法如何使用
  6. ASP.NET Core默认注入方式下如何注入多个实现(多种方式)
  7. Hive中的排序语法
  8. delphi.指针.应用----应用重要 多看 多练
  9. jQuery dataTables四种数据来源[转]-原文地址:http://xqqing79.iteye.com/blog/1219425
  10. DBCC--SHRINKDATABASE