栈和队列数据结构的基本概念及其相关的Python实现


Posted in Python onAugust 24, 2015

先来回顾一下栈和队列的基本概念:

相同点:从"数据结构"的角度看,它们都是线性结构,即数据元素之间的关系相同。

不同点:栈(Stack)是限定只能在表的一端进行插入和删除操作的线性表。 队列(Queue)是限定只能在表的一端进行插入和在另一端进行删除操作的线性表。它们是完全不同的数据类型。除了它们各自的基本操作集不同外,主要区别是对插入和删除操作的"限定"。

栈必须按"后进先出"的规则进行操作:比如说,小学老师批改学生的作业,如果不打乱作业本的顺序的话,那么老师批改的第一份作业一定是最后那名同学交的那份作业,如果把所有作业本看作是一个栈中的元素,那么最后一个同学交的作业本就是栈顶元素,而第一个同学交的,也就是最低端的作业本,就是栈底元素,这就是对栈的读取规则。

而队列必须按"先进先出"的规则进行操作:打个比方,一些人去银行办理业务,一定是先去排队的最先得到服务,当然他也是第一个走出银行的(假设这些人都在一个窗口排队)。如果把所有这些等候服务的人看作是队的元素,第一个人就是对头元素,相应的,最后一个人就是队尾元素。这是队的读取规则。

用Python实现栈,这是Python核心编程里的一个例子:

#!/usr/bin/env python 
 
#定义一个列表来模拟栈 
stack = [] 
 
#进栈,调用列表的append()函数加到列表的末尾,strip()没有参数是去掉首尾的空格 
def pushit(): 
  stack.append(raw_input('Enter new string: ').strip()) 
 
#出栈,用到了pop()函数 
def popit(): 
  if len(stack) == 0: 
    print 'Cannot pop from an empty stack!' 
  else: 
    print 'Removed [', stack.pop(), ']' 
 
#编历栈 
def viewstack(): 
  print stack 
 
#CMDs是字典的使用 
CMDs = {'u': pushit, 'o': popit, 'v': viewstack} 
 
#pr为提示字符 
def showmenu(): 
  pr = """ 
  p(U)sh 
  p(O)p 
  (V)iew 
  (Q)uit 
    Enter choice: """ 
 
  while True: 
    while True: 
      try: 
        #先用strip()去掉空格,再把第一个字符转换成小写的 
        choice = raw_input(pr).strip()[0].lower() 
      except (EOFError, KeyboardInterrupt, IndexError): 
        choice = 'q' 
 
      print '\nYou picked: [%s]' % choice 
      if choice not in 'uovq': 
        print 'Invalid option, try again' 
      else: 
        break 
 
#CMDs[]根据输入的choice从字典中对应相应的value,比如说输入u,从字典中得到value为pushit,执行pushit()进栈操作 
    if choice == 'q': 
      break 
    CMDs[choice]() 
 
#判断是否是从本文件进入,而不是被调用 
if __name__ == '__main__': 
  showmenu()

用Python实现队列:

#!/usr/bin/env python 
 
queue = [] 
 
def enQ(): 
  queue.append(raw_input('Enter new string: ').strip()) 
 
#调用list的列表的pop()函数.pop(0)为列表的第一个元素 
def deQ(): 
  if len(queue) == 0: 
    print 'Cannot pop from an empty queue!' 
  else: 
    print 'Removed [', queue.pop(0) ,']' 
 
def viewQ(): 
  print queue 
 
CMDs = {'e': enQ, 'd': deQ, 'v': viewQ} 
 
def showmenu(): 
  pr = """ 
  (E)nqueue 
  (D)equeue 
  (V)iew 
  (Q)uit 
    Enter choice: """ 
 
  while True: 
    while True: 
      try: 
        choice = raw_input(pr).strip()[0].lower() 
      except (EOFError, KeyboardInterrupt, IndexError): 
        choice = 'q' 
 
      print '\nYou picked: [%s]' % choice 
      if choice not in 'devq': 
        print 'Invalid option, try again' 
      else: 
        break 
    if choice == 'q': 
      break 
    CMDs[choice]() 
 
if __name__ == '__main__': 
  showmenu()
Python 相关文章推荐
Python标准异常和异常处理详解
Feb 02 Python
Python中用startswith()函数判断字符串开头的教程
Apr 07 Python
Python实现获取操作系统版本信息方法
Apr 08 Python
python将文本分每两行一组并保存到文件
Mar 19 Python
python selenium执行所有测试用例并生成报告的方法
Feb 13 Python
python获取txt文件词向量过程详解
Jul 05 Python
python的pyecharts绘制各种图表详细(附代码)
Nov 11 Python
Python利用matplotlib绘制约数个数统计图示例
Nov 26 Python
用python3读取python2的pickle数据方式
Dec 25 Python
Java Spring项目国际化(i18n)详细方法与实例
Mar 20 Python
浅谈keras中自定义二分类任务评价指标metrics的方法以及代码
Jun 11 Python
python3.7中安装paddleocr及paddlepaddle包的多种方法
Nov 27 Python
如何使用七牛Python SDK写一个同步脚本及使用教程
Aug 23 #Python
Python中for循环和while循环的基本使用方法
Aug 21 #Python
Python中条件判断语句的简单使用方法
Aug 21 #Python
Python编程中的异常处理教程
Aug 21 #Python
剖析Python的Tornado框架中session支持的实现代码
Aug 21 #Python
约瑟夫问题的Python和C++求解方法
Aug 20 #Python
在类Unix系统上开始Python3编程入门
Aug 20 #Python
You might like
实用PHP会员权限控制实现原理分析
2011/05/29 PHP
PHP实现事件机制实例分析
2015/06/26 PHP
PHP 实现页面静态化的几种方法
2017/07/23 PHP
JavaScript DOM 添加事件
2009/02/14 Javascript
Javascript this指针
2009/07/30 Javascript
javascript使用location.search的示例
2013/11/05 Javascript
jquery幻灯片插件bxslider样式改进实例
2014/10/15 Javascript
JavaScript sup方法入门实例(把字符串显示为上标)
2014/10/20 Javascript
分享9个最好用的JavaScript开发工具和代码编辑器
2015/03/24 Javascript
Bootstrap框架的学习教程详解(二)
2016/10/18 Javascript
用原生js做单页应用
2017/01/17 Javascript
微信小程序 下拉菜单的实现
2017/04/06 Javascript
微信小程序使用request网络请求操作实例
2017/12/15 Javascript
vue实现在表格里,取每行的id的方法
2018/03/09 Javascript
JavaScript门道之标准库
2018/05/26 Javascript
js 图片懒加载的实现
2020/10/21 Javascript
[00:37]2016完美“圣”典风云人物:rOtk宣传片
2016/12/09 DOTA
python实现决策树C4.5算法详解(在ID3基础上改进)
2017/05/31 Python
分享vim python缩进等一些配置
2018/07/02 Python
python自动化之Ansible的安装教程
2019/06/13 Python
python统计字符串中字母出现次数代码实例
2020/03/02 Python
利用Python实现朋友圈中的九宫格图片效果
2020/09/03 Python
python对 MySQL 数据库进行增删改查的脚本
2020/10/22 Python
Pandora西班牙官方商店:PandoraShop.es
2020/10/05 全球购物
端口镜像是怎么实现的
2014/03/25 面试题
业务主管岗位职责范本
2013/12/25 职场文书
幼儿园国庆节活动方案
2014/02/01 职场文书
英文求职信写作小建议
2014/02/16 职场文书
《秋游》教学反思
2014/04/24 职场文书
淘宝活动总结范文
2014/06/26 职场文书
活着观后感
2015/06/03 职场文书
教师节简报
2015/07/20 职场文书
InterProcessMutex实现zookeeper分布式锁原理
2022/03/21 Java/Android
win11无法登录onedrive错误代码0x8004def7怎么办 ?
2022/04/05 数码科技
python绘制简单直方图(质量分布图)的方法
2022/04/21 Python
Python+pyaudio实现音频控制示例详解
2022/07/23 Python