数据结构与算法:栈(Stack)的实现
栈在程序设计当中是一个十分常见的数据结构,它就相当于一个瓶子,可以往里面装入各种元素,最先装进这个瓶子里的元素,要把后装进这个瓶子里的全部元素拿出来完之后才能够把他给拿出来。假设这个瓶子在桌上平放,左边是瓶底,右边是瓶口,那么我们可以作出下图:
可以看到瓶子里一共被我放进了5个元素,分别是1,2,3,4,5。那么最先放进去的元素则是1,紧接着我放入了2,3,4,5.这很容易理解对吧。如果我们想要把其中的一个元素,比如2取出来,那么我们需要把3,4,5都取出来才能够拿到2。因此栈这个数据结构遵循的是“先进后出”的原则。我们可以用python当中的list来表示一个栈,list列表是一个天然的栈结构,可以很容易地表示出栈和入栈。首先我们定义一个栈的类,再到栈里定义各种栈的实现方法即可,比如出栈,入栈,判断栈是否为空,判断栈的大小等方法,程序如下:
class Stack(): def __init__(self):
# 初始化一个空的列表
self.__list=[] # 压栈,也就是把元素从上方添加上去,但是这里我咋感觉是从下方添加进去的,顺序反了?
def push(self,item):
self.__list.append(item) def pop(self):
return self.__list.pop()# 弹出栈顶的元素,同时删除栈顶的元素 # 返回栈顶的元素
def peek(self):
return self.__list[len(self.__list)-1]# 也就是获取列表当中的最后一个元素 # 判断栈是否为空
def is_empty(self):
return self.__list == [] # 计算栈的大小
def size(self):
return len(self.__list) stack = Stack()
print("Is this empty? :",stack.is_empty()) stack.push(1)
stack.push(2)
stack.push(3)
stack.push(4) print("Is this empty? :",stack.is_empty()) print(stack.pop())
print(stack.pop())
print(stack.pop())
print(stack.pop())
可以看到最后我们创建了一个stack对象来调用里面的方法,并往栈里送入了4个元素,最后使用pop方法依次弹出栈顶的元素,输出如下:
Is this empty? : True
Is this empty? : False
4
3
2
1
这就是我们的数据结构:栈。简单吧!
数据结构与算法:栈(Stack)的实现的更多相关文章
- [数据结构与算法]栈Stack的多种实现
声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...
- javascript数据结构与算法---栈
javascript数据结构与算法---栈 在上一遍博客介绍了下列表,列表是最简单的一种结构,但是如果要处理一些比较复杂的结构,列表显得太简陋了,所以我们需要某种和列表类似但是更复杂的数据结构---栈 ...
- JavaScript数据结构与算法-栈练习
栈的实现 // 栈类 function Stack () { this.dataStore = []; this.top = 0; // 栈顶位置 相当于length,不是索引. this.push ...
- JS数据结构与算法——栈
JS数据结构与算法--栈 1.栈结构概念 栈(Stack)是一种先进后出(LIFO Last in First out)的线性表,先进栈的将会比后进栈的先出栈. 栈的限制是仅允许在一端进行插入和删除运 ...
- JavaScript数据结构和算法----栈
前言 栈是一种遵循后进先出(LIFO)原则的有序集合,新添加的或待删除的元素都保存在栈的末尾,称作栈顶,另外一端就叫栈底.在栈里,新元素都靠近栈顶,旧元素都接近栈底.可以想象桌上的一叠书,或者厨房里的 ...
- 每周一练 之 数据结构与算法(Stack)
最近公司内部在开始做前端技术的技术分享,每周一个主题的 每周一练,以基础知识为主,感觉挺棒的,跟着团队的大佬们学习和复习一些知识,新人也可以多学习一些知识,也把团队内部学习氛围营造起来. 我接下来会开 ...
- C语言- 基础数据结构和算法 - 栈的链式存储
听黑马程序员教程<基础数据结构和算法 (C版本)>, 照着老师所讲抄的, 视频地址https://www.bilibili.com/video/BV1vE411f7Jh?p=1 喜欢的朋友 ...
- C语言- 基础数据结构和算法 - 栈的顺序存储
听黑马程序员教程<基础数据结构和算法 (C版本)>, 照着老师所讲抄的, 视频地址https://www.bilibili.com/video/BV1vE411f7Jh?p=1 喜欢的朋友 ...
- Java数据结构和算法 - 栈和队列
Q: 栈.队列与数组的区别? A: 本篇主要涉及三种数据存储类型:栈.队列和优先级队列,它与数组主要有如下三个区别: A: (一)程序员工具 数组和其他的结构(栈.队列.链表.树等等)都适用于数据库应 ...
- Javascript数据结构与算法--栈的实现与用法
栈数据结构 栈是一种遵从后进先出(LIFO)原则的有序集合.新添加的或者待删除的元素都保存在栈的同一端,称作栈顶,另一端就叫栈底.在栈里,新元素都靠近栈顶,旧元素都接近栈底. 我们在生活中常能看到栈的 ...
随机推荐
- 多线程设置flag标志位实现同步
信号灯解决同步问题 我尽量注释了代码,可以很容易理解了. package Thread; /** * 信号灯 * 借助标志位 */ public class FlagThread { public s ...
- 如何用 Python 绘制玫瑰图等常见疫情图
新冠疫情已经持续好几个月了,目前,我国疫情已经基本控制住了,而欧美国家正处于爆发期,我们会看到很多网站都提供了多种疫情统计图,今天我们使用 Python 的 pyecharts 框架来绘制一些比较常见 ...
- JSON Extractor(JSON提取器)
JSON提取器 Variable names(名称):提取器的名称Apply to(应用范围):Main sample and sub-samples:应用于主sample及子sampleMain s ...
- B - Fadi and LCM CodeForces - 1285C 质因子
题目大意很简单,给你一个整数X,让你求a和b,使得max(a,b)尽可能的小,然后打印a,b 题解:想到了质因子分解,也考虑到了暴力,但是觉得暴力的话会TLE,所以打算用贪心做,然后就一直Wa.... ...
- 不同目录有同名proto文件情况下,protoc生成.cc/.h
首先先参考一下别人的博客,看完了,看懂了,再回过头来看我下面说的情况. 链接 https://blog.csdn.net/CAir2/article/details/78201572 但是这个也就是基 ...
- 装机摸鱼日记01--DDR3AMD专用内存+QHQF(6400T)试水
前些日子在某鱼入手了两条AMD专用内存,宏想的DDR3-1600MHz-8G内存和一块高贵阿苏斯Z170-P-D3主板,然后某宝600多买了一颗QHQF(当然也可以玩QHQJ,更便宜,估计三百多),准 ...
- gitbook命令
安装gitbook命令 前提:已经安装nodejs npm install -g gitbook-cli 查看版本号 gitbook -V gitbook命令 gitbook -h Usage: gi ...
- jmeter引入外部jar包的方法
jmeter最完美的jar包引入 第一步:需要新建一个文件夹用来存放需要引用的外部jar包,例如:建一个dependencies 文件夹 第二步:jmeter 的配置文件 jmeter.propert ...
- alfred workflow 开发
alfred python demo
- gloo基本知识
Architechture(架构) Gloo通过Envoy XDS gRPC API来动态更新Envoy配置, 更方便的控制Envoy Proxy, 并保留扩展性..本质是一个Envoy xDS配置翻 ...