数据结构与算法:栈(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)原则的有序集合.新添加的或者待删除的元素都保存在栈的同一端,称作栈顶,另一端就叫栈底.在栈里,新元素都靠近栈顶,旧元素都接近栈底. 我们在生活中常能看到栈的 ...
随机推荐
- shell命令(一)
什么是shell? Shell是一个应用程序,它连接了用户和Linux内核,让用户能够更加高效.安全.低成本地使用Linux内核,这就是Shell的本质. shell与Linux系统关系图 shell ...
- webWMS开发过程记录(一)- 软件开发的流程
前言:计划开发一个webWMS,并将开发过程比较完整的记录下来.希望可以完成这个目标 软件开发的流程: 1. 了解该项目的相关概念. 了解所要开发的软件属于什么产品.该产品的基本定义是什么?基本功能模 ...
- Julia基础语法复数和分数
1.复数 2.分数
- stand up meeting 1/19/2016
part 组员 工作 工作耗时/h 明日计划 工作耗时/h UI 冯晓云 准备最后的发布和整个开发的整理总结 6 继续releas ...
- D - Yet Another Monster Killing Problem
题目连接: https://codeforces.com/contest/1257/problem/D 题目大意: n个怪兽,m个英雄,每个怪兽有一定的能力值,每个英雄有一定的能力值和一定的耐力值.耐 ...
- Plant 矩阵快速幂,,,,有点忘了
题目链接:https://codeforces.com/contest/185/problem/A 题目大意就是求n次以后 方向朝上的三角形的个数 以前写过这个题,但是忘了怎么做的了,,,又退了一遍 ...
- search(6)- elastic4s-CRUD
如果我们把ES作为某种数据库来使用的话,必须熟练掌握ES的CRUD操作.在这之前先更正一下上篇中关于检查索引是否存在的方法:elastic4s的具体调用如下: //删除索引 val rspExists ...
- JMeter分布式压测-常见问题之(Server failed to start: java.rmi.server.ExportException: Listen failed on port: 0; nested exception )
问题描述: 在Linux环境启动jmeter-server时抛出了如下异常: 问题描述: 1.可能监听的端口被占用,修改端口号2.Server相关的rmi配置需要调整 解决方案: 在目录/apache ...
- vue2.x学习笔记(十二)
接着前面的内容:https://www.cnblogs.com/yanggb/p/12592256.html. 组件基础 组件化是vue的一个重要特性,也是vue学习中非常重要的一个知识点. 基础示例 ...
- 15分钟从零开始搭建支持10w+用户的生产环境(二)
上一篇文章,把这个架构的起因,和操作系统的选择进行了详细说明. 原文地址:15分钟从零开始搭建支持10w+用户的生产环境(一) 二.数据库的选择 对于一个10W+用户的系统,数据库选择很重要. 一 ...