Python可以实现栈的结构吗


Posted in Python onMay 27, 2020

栈(stack)又名堆栈,它是一种运算受限的线性表。在Python中可使用列表进行实现。

什么是栈?

栈(stack)又名堆栈,它是一种运算受限的线性表。其限制是仅允许在表的一端进行插入和删除运算。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。

如何实现?

在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()

实例内容扩展:

# -*- coding:utf-8 -*-
# __author__ :kusy
# __content__:文件说明
# __date__:2018/9/30 17:28


class MyStack(object):
  def __init__(self):
    self.stack_list = []
    self.count = 0

  # 创建一个栈
  def create_stack(self):
    return self.stack_list

  # 栈中添加值
  def push(self, value):
    self.stack_list.insert(0,value)
    self.count += 1

  #返回栈顶元素值
  def peek(self):
    if self.count:
      return self.stack_list[0]

  # 删除栈顶元素
  def pop(self):
    self.stack_list.pop(0)
    self.count -= 1

  # 返回栈是否为空
  def is_empty(self):
    return self.count == 0

  #打印栈内容
  def print_all(self):
    for sl in self.stack_list:
      print(sl)

if __name__ == '__main__':
  ms = MyStack()
  ms.create_stack()
  ms.push(1)
  ms.push(2)
  ms.push(3)
  print('栈元素:')
  ms.print_all()
  print('栈顶元素:',ms.peek())
  ms.pop()
  print('栈顶元素删除后:')
  ms.print_all()
  print('栈是否为空:','是' if ms.is_empty() else '否')
  print('---继续删除元素')
  ms.pop()
  print('---继续删除元素')
  ms.pop()
  print('栈是否为空:','是' if ms.is_empty() else '否')

运行结果如下

C:\Users\suneee\AppData\Local\Programs\Python\Python36\python.exe E:/wangjz/PyWorkSpace/LearnPython/PY0929/stack.py
栈元素:
3
2
1
栈顶元素: 3
栈顶元素删除后:
2
1
栈是否为空: 否
---继续删除元素
---继续删除元素
栈是否为空: 是

Process finished with exit code 0

到此这篇关于Python可以实现栈的结构吗的文章就介绍到这了,更多相关Python实现栈的结构的条件内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
python多线程编程中的join函数使用心得
Sep 02 Python
python 连接sqlite及简单操作
Jun 30 Python
使用Python操作excel文件的实例代码
Oct 15 Python
Python Subprocess模块原理及实例
Aug 26 Python
Python3视频转字符动画的实例代码
Aug 29 Python
Python实现PyPDF2处理PDF文件的方法示例
Sep 25 Python
详解python opencv、scikit-image和PIL图像处理库比较
Dec 26 Python
使用tensorflow实现VGG网络,训练mnist数据集方式
May 26 Python
python爬虫可以爬什么
Jun 16 Python
Django:使用filter的pk进行多值查询操作
Jul 15 Python
django下创建多个app并设置urls方法
Aug 02 Python
Python GUI库Tkiner使用方法代码示例
Nov 27 Python
Python如何脚本过滤文件中的注释
May 27 #Python
Python如何获取文件指定行的内容
May 27 #Python
Python web如何在IIS发布应用过程解析
May 27 #Python
利用Python实现某OA系统的自动定位功能
May 27 #Python
Python中常见的数制转换有哪些
May 27 #Python
Python如何实现邮件功能
May 27 #Python
Python中内建模块collections如何使用
May 27 #Python
You might like
肝肠寸断了解下!盘点史上最伤心的十大动漫
2020/03/04 日漫
深入解析PHP内存管理之谁动了我的内存
2013/06/20 PHP
php中使用array_filter()函数过滤空数组的实现代码
2014/08/19 PHP
php实现的常见排序算法汇总
2014/09/08 PHP
PHP生成唯一订单号
2015/07/05 PHP
64位windows系统下安装Memcache缓存
2015/12/06 PHP
基于PHP实现简单的随机抽奖小程序
2016/01/05 PHP
Smarty模板变量调节器用法分析
2016/05/23 PHP
jquery实现可拖动DIV自定义保存到数据的实例
2013/11/20 Javascript
jquery实现页面百叶窗走马灯式翻滚显示效果的方法
2015/03/12 Javascript
jQuery实现仿Alipay支付宝首页全屏焦点图切换特效
2015/05/04 Javascript
Bootstrap每天必学之面板
2015/11/30 Javascript
jquery按回车键实现表单提交的简单实例
2016/05/25 Javascript
Bootstrap中文本框的宽度变窄并且加入一副验证码图片的实现方法
2016/06/23 Javascript
AngularJS封装指令方法详解
2016/12/12 Javascript
微信小程序 Canvas增强组件实例详解及源码分享
2017/01/04 Javascript
vue-cli开发环境实现跨域请求的方法
2018/04/07 Javascript
vue项目打包部署_nginx代理访问方法详解
2018/09/20 Javascript
Vue起步(无cli)的啊教程详解
2019/04/11 Javascript
浅谈对于“不用setInterval,用setTimeout”的理解
2019/08/28 Javascript
基于js判断浏览器是否支持webGL
2020/04/18 Javascript
python中使用mysql数据库详细介绍
2015/03/27 Python
Python 普通最小二乘法(OLS)进行多项式拟合的方法
2018/12/29 Python
python实现五子棋小程序
2019/06/18 Python
python+opencv3.4.0 实现HOG+SVM行人检测的示例代码
2021/01/28 Python
详解H5本地储存Web Storage
2017/07/03 HTML / CSS
Agoda.com官方网站:便宜预订全球酒店,高达80%的折扣
2018/04/04 全球购物
英国Iceland杂货店:网上食品购物
2020/12/16 全球购物
J2EE的优越性主要表现在哪些方面
2016/03/28 面试题
学前班幼儿评语大全
2014/12/29 职场文书
2015年爱国卫生工作总结
2015/04/22 职场文书
2015年公路路政个人工作总结
2015/07/24 职场文书
我的生日感言
2015/08/03 职场文书
公司档案管理制度
2015/08/05 职场文书
初中生物教学反思
2016/02/20 职场文书
SpringBoot生成License的实现示例
2021/06/16 Java/Android