数据结构 02-栈概念、Python 中使用列表 list 实现栈
目 录
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 栈的常规操作
栈的操作包括下面的内容:
- Stack(optional: callable data) 创建一个新的空栈,或者使用可迭代对象初始化栈
- push() 添加一个新的元素 item 到栈顶
- pop() 弹出栈顶 top 元素
- peek() 返回 top 栈顶元素,即只读功能
- is_empty() 判断栈是否为空
- size() 返回栈的元素个数
- __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 实现栈相关推荐
- 零基础Python完全自学教程15:Python中的列表
欢迎你来到站长学堂,学习站长在线出品的在线课程<零基础 Python完全自学教程>今天给大家分享的是第14课< Python中的列表 >.本节课是一个大课,我分了这些知识点进行 ...
- Python中的列表类型
什么是列表 列表可以看作我们生活中排队去超市结账的队伍 列表就是队列 他是各种数据类型的集合,也是一种数据结构. 列表是一种有序,且内容可重复的集合类型 列表的定义 在Python中,list代表着列 ...
- 逗号分隔的字符串转换为Python中的列表 split
将逗号分隔的字符串转换为Python中的列表 给定一个字符串: 它是由逗号分隔的几个值的序列: mStr = '192.168.1.1,192.168.1.2,192.168.1.3' 如何将字符串转 ...
- python中创建列表[]和list()哪个效率快?为什么快?快多少呢?
python中创建列表的两种方式: # 方法一:使用成对的方括号语法 list_a = []# 方法二:使用内置的 list() list_b = list() 1. [] 是 list() 的三-四 ...
- 这12种方法轻松合并Python中的列表
我喜欢12这个数字,因为有太多的事情与12有关.一年有12个月;古代用12个时辰(地支)表示一天的时间.用一纪表示12年;希腊有12主神;黄道有12宫;撒迦利亚.西琴先生的<地球编年史>中 ...
- 从python中的列表中获取唯一值[重复]
本文翻译自:Get unique values from a list in python [duplicate] This question already has an answer here: ...
- 如何在Python中反转列表?
如何在Python中执行以下操作? array = [0, 10, 20, 40] for (i = array.length() - 1; i >= 0; i--) 我需要一个数组的元素,但是 ...
- python中的列表和元组_python中列表和元组的区别
如果有了解过python中的列表和元组,你可能会知道相对于列表,元组是不可变的,也就是说元组中的数据不能随意更改.除了列表是用中括号表示而元组是用小括号表示之外,这两种数据类型好像并没有什么不同,都是 ...
- python随机抽签列表中的同学值日_神奇的大抽签--Python中的列表_章节测验,期末考试,慕课答案查询公众号...
神奇的大抽签--Python中的列表_章节测验,期末考试,慕课答案查询公众号 更多相关问题 下图表示几个植物类群的进化关系.下列叙述不正确的是[ ]A.最先出现的植物类群是甲B.乙和丙都是由甲进化来的 ...
最新文章
- 如何在SAP云平台ABAP编程环境里创建自己的Z表
- luogu P2516 [HAOI2010]最长公共子序列
- 重复次数最多的 子串_每日算法系列【LeetCode 424】替换后的最长重复字符
- leetcode —— 1013. 将数组分成和相等的三个部分
- python test suite什么意思_Python TestSuite生成测试报告过程解析
- matlab电机建模,Matlab系列之无刷电机matlab建模.ppt
- 分离了sa默认的数据库 , 用sa登录不了的解决方法
- 作为程序猿----别说你不知道的人物!
- 机器学习概念笔记(1)——混淆矩阵、Precision、Recall、F-score
- Java开发笔记(一百二十六)Swing的窗口
- Atitit.视频文件加密的方法大的总结 java c# php
- 怎样才能查到4S店保养记录,4S店维修保养记录怎样查询,Javascript学习指南
- 【天线】【1】一些名词和简单概念的解释
- 卷积神经网络:用于图像分类
- Uri.parse()的各种用法
- 【数据结构】选择排序
- [考研]考研倒计时13天
- 电影推荐系统的设计与实现(论文+系统)_kaic
- 风力发电仿真系列-基于Simulink搭建的双馈风力发电(DFIG)模型
- JAVA 给图片添加文字水印