目      录

1. 栈简介

1.1 栈的概念

1.2 栈的类型

1.2.1 是否能动态增长

1.2.2 栈的实现方式

2. Python 中使用列表 list 实现栈

2.1 栈的常规操作

2.2 栈的代码实现


1. 栈简介

1.1 栈的概念

栈,英语 Stack,又称为堆栈,是一种特殊的数组或者说列表;可存入数据元素、访问元素、删除元素。它最大的特点是只能允许在栈顶端(top)进行加入数据(动作称为 push)和输出数据(动作称为 pop)。
        它不能按照下标读取数据,任何时候可以访问、删除的元素都是此前最后存入的那个元素,访问顺序是固定的,即后进先出(LIFO, Last In First Out),与顶部对应的端称为“底部”bottom。

1.2 栈的类型

1.2.1 是否能动态增长

在其他语言中,栈根据是否能动态增长,分为静态栈和动态栈。尤其是 C、Java 中使用固定长度分配内存时候,是静态栈。可以动态的增长栈长度的,是静态栈。

在 Python 中一般是支持动态增长的,所以多半是动态栈。如果需要实现静态栈,也可以加上限定来实现。

1.2.2 栈的实现方式

Python 中栈的实现方式一般分两种,一个是使用列表实现,一个是使用链表实现。

使用列表实现方便快捷,代码实现简单,下面会写出使用列表实现栈的代码,使用链表实现的,会在链表章节进行描述。

2. Python 中使用列表 list 实现栈

2.1 栈的常规操作

栈的操作包括下面的内容:

  1. Stack(optional: callable data)       创建一个新的空栈,或者使用可迭代对象初始化栈
  2. push()        添加一个新的元素 item 到栈顶
  3. pop()          弹出栈顶 top 元素
  4. peek()        返回 top 栈顶元素,即只读功能
  5. is_empty() 判断栈是否为空
  6. size()         返回栈的元素个数
  7. __str__()    供 print 函数使用时候直接调用

2.2 栈的代码实现

class Stack(object):def __init__(self,vals=None):self.stack=[]self.stack_size=0if(vals ):for val in vals:self.stack.append(val)self.stack_size+=1# 压栈def push(self,val):self.stack.append(val)self.stack_size+=1return(True)# 弹出栈顶元素def pop(self):if(self.stack_size==0):return(None)else:self.stack_size-=1return(self.stack.pop())# 读取栈顶元素def peek(self):if(self.stack_size==0):return(None)else:return(self.stack[-1])# 判断栈是否为空def is_empty(self):if(self.stack_size==0):return(True)else:return(False)# 获得栈的元素的个数def size(self):return(self.stack_size)# 提供给 print 函数def __str__(self):return("This is a stack ==>{0}".format(self.stack))
# stack1
print("*"*16+"create a empty stack"+"*"*16)
stack1=Stack()
print(stack1)
stack1.push(0)
stack1.push(1)
stack1.push(2)
print("*"*16+"push three elements"+"*"*16)
print(stack1)
stack1.pop()
stack1.pop()
print("*"*16+"pop two elements"+"*"*16)
print(stack1)# stack1
print("*"*16+"create a  stack as ['a','b','c','d']"+"*"*16)
stack1=Stack(['a','b','c','d'])
print(stack1)
print("*"*16+"judge the stiack is empty"+"*"*16)
print(stack1.is_empty())
print("*"*16+"read the top element"+"*"*16)
print(stack1.peek())
print("*"*16+"get the stack len"+"*"*16)
print(stack1.size())

''

要是大家觉得写得还行,麻烦点个赞或者收藏吧,想个博客涨涨人气,非常感谢!

'''

数据结构 02-栈概念、Python 中使用列表 list 实现栈相关推荐

  1. 零基础Python完全自学教程15:Python中的列表

    欢迎你来到站长学堂,学习站长在线出品的在线课程<零基础 Python完全自学教程>今天给大家分享的是第14课< Python中的列表 >.本节课是一个大课,我分了这些知识点进行 ...

  2. Python中的列表类型

    什么是列表 列表可以看作我们生活中排队去超市结账的队伍 列表就是队列 他是各种数据类型的集合,也是一种数据结构. 列表是一种有序,且内容可重复的集合类型 列表的定义 在Python中,list代表着列 ...

  3. 逗号分隔的字符串转换为Python中的列表 split

    将逗号分隔的字符串转换为Python中的列表 给定一个字符串: 它是由逗号分隔的几个值的序列: mStr = '192.168.1.1,192.168.1.2,192.168.1.3' 如何将字符串转 ...

  4. python中创建列表[]和list()哪个效率快?为什么快?快多少呢?

    python中创建列表的两种方式: # 方法一:使用成对的方括号语法 list_a = []# 方法二:使用内置的 list() list_b = list() 1. [] 是 list() 的三-四 ...

  5. 这12种方法轻松合并Python中的列表

    我喜欢12这个数字,因为有太多的事情与12有关.一年有12个月;古代用12个时辰(地支)表示一天的时间.用一纪表示12年;希腊有12主神;黄道有12宫;撒迦利亚.西琴先生的<地球编年史>中 ...

  6. 从python中的列表中获取唯一值[重复]

    本文翻译自:Get unique values from a list in python [duplicate] This question already has an answer here: ...

  7. 如何在Python中反转列表?

    如何在Python中执行以下操作? array = [0, 10, 20, 40] for (i = array.length() - 1; i >= 0; i--) 我需要一个数组的元素,但是 ...

  8. python中的列表和元组_python中列表和元组的区别

    如果有了解过python中的列表和元组,你可能会知道相对于列表,元组是不可变的,也就是说元组中的数据不能随意更改.除了列表是用中括号表示而元组是用小括号表示之外,这两种数据类型好像并没有什么不同,都是 ...

  9. python随机抽签列表中的同学值日_神奇的大抽签--Python中的列表_章节测验,期末考试,慕课答案查询公众号...

    神奇的大抽签--Python中的列表_章节测验,期末考试,慕课答案查询公众号 更多相关问题 下图表示几个植物类群的进化关系.下列叙述不正确的是[ ]A.最先出现的植物类群是甲B.乙和丙都是由甲进化来的 ...

最新文章

  1. 如何在SAP云平台ABAP编程环境里创建自己的Z表
  2. luogu P2516 [HAOI2010]最长公共子序列
  3. 重复次数最多的 子串_每日算法系列【LeetCode 424】替换后的最长重复字符
  4. leetcode —— 1013. 将数组分成和相等的三个部分
  5. python test suite什么意思_Python TestSuite生成测试报告过程解析
  6. matlab电机建模,Matlab系列之无刷电机matlab建模.ppt
  7. 分离了sa默认的数据库 , 用sa登录不了的解决方法
  8. 作为程序猿----别说你不知道的人物!
  9. 机器学习概念笔记(1)——混淆矩阵、Precision、Recall、F-score
  10. Java开发笔记(一百二十六)Swing的窗口
  11. Atitit.视频文件加密的方法大的总结 java c# php
  12. 怎样才能查到4S店保养记录,4S店维修保养记录怎样查询,Javascript学习指南
  13. 【天线】【1】一些名词和简单概念的解释
  14. 卷积神经网络:用于图像分类
  15. Uri.parse()的各种用法
  16. 【数据结构】选择排序
  17. [考研]考研倒计时13天
  18. 电影推荐系统的设计与实现(论文+系统)_kaic
  19. 风力发电仿真系列-基于Simulink搭建的双馈风力发电(DFIG)模型
  20. JAVA 给图片添加文字水印

热门文章

  1. 代码随想录第二天|977.有序数组的平方 ,209.长度最小的子数组 ,59.螺旋矩阵II ,总结
  2. 30岁+的人如何进行自我提升和职场规划
  3. Ubuntu 安装zsh配置oh-my-zsh
  4. APP渗透测试-----APK反编译
  5. AtCoder Beginner Contest 265笔记
  6. 读书虽好,却教不会你行动的能力
  7. 钉钉小程序 企业内部应用开发
  8. 国内SEI授权的CMMI主任评估师名单
  9. win10禁用软件开机自启
  10. Java swing写五子棋小游戏(分析)