本题目摘自《Python程序员面试算法宝典》,我会每天做一道这本书上的题目,并分享出来,统一放在我博客内,收集在一个分类中。

2.1 如何实现栈

【阿里巴巴面试题】

难度系数:⭐⭐⭐

考察频率:⭐⭐⭐⭐

题目描述:

实现一个栈的数据结构,使其具有以下方法:压栈、弹栈、取栈顶元素、判断栈是否为空以及获取栈中元素个数。

解答

方法一 : 数组(列表)实现

采用数组(列表)实现栈的时候,栈空间是一段连续的空间。

class Stack:
def __init__(self, maxsize):
self.maxsize = maxsize
self.data_list = [None] * self.maxsize
self.top = 0 def is_empty(self): # 判断是否为空
return self.top == 0 def in_stack(self, value): # 压栈
if self.top < self.maxsize:
self.data_list[self.top] = value
self.top += 1
else:
raise Exception("栈已满") def pop(self): # 弹栈
if self.is_empty():
return None
self.top -= 1
return self.data_list[self.top] def get_top(self): # 取栈顶元素
if self.is_empty():
return
return self.data_list[self.top-1] def get_count(self): # 获取栈中元素
return self.top

方法二 :链表实现

在创建链表的时候经常采用一种从头结点插入新结点的方法。可以采用这种方法来实现栈。

class Stack:
def __init__(self, maxsize):
self.maxsize = maxsize
self.data_list = [None] * self.maxsize
self.top = 0 def is_empty(self): # 判断是否为空
return self.top == 0 def in_stack(self, value): # 压栈
if self.top < self.maxsize:
self.data_list[self.top] = value
self.top += 1
else:
raise Exception("栈已满") def pop(self): # 弹栈
if self.is_empty():
return None
self.top -= 1
return self.data_list[self.top] def get_top(self): # 取栈顶元素
if self.is_empty():
return
return self.data_list[self.top-1] def get_count(self): # 获取栈中元素
return self.top

两种方法对比:

采用数组(列表)实现栈的优点是:一个元素值占用一个存储空间;它的缺点是:如果初始化申请的存储空间太大,会造成空间的浪费,如果申请的空间小,后期会经常需要扩充存储空间,扩充存储空间是个费时的操作,这样会造成性能下降。

采用链表实现栈的优点是:使用灵活方便,只有在需要的时候才会申请空间。它的缺点是:除了要存储元素外,还需要额外的存储空间存储指针信息。

算法性能分析:

这两种方法压栈和弹栈的时间复杂度都是O(1)

欢迎小伙伴们加入我创建的python交流群:625988679

python面试题2.1:如何实现栈的更多相关文章

  1. python公司面试题集锦 python面试题大全

    问题一:以下的代码的输出将是什么? 说出你的答案并解释. class Parent(object): x = 1 class Child1(Parent): pass class Child2(Par ...

  2. 很全的 Python 面试题

    很全的 Python 面试题 Python语言特性 1 Python的函数参数传递 看两个例子:           Python   1 2 3 4 5 a = 1 def fun(a):      ...

  3. python面试题六: 剑指offer

    面试题3 二维数组中的查找 LeetCode题目:二维数组中,每行从左到右递增,每列从上到下递增,给出一个数,判断它是否在数组中思路:从左下角或者右上角开始比较 def find_integer(ma ...

  4. Python面试题_中级版

    Python 面试题 1.Python是如何进行内存管理的 对象引用机制.垃圾回收机制.内存池机制 1.1对象引用机制 Python内部使用引用计数,来保持追踪内存中的对象,所有对象都有引用计数. 引 ...

  5. Python面试题 —— 获取列表中位数

    中位数是一个可将数值集合划分为相等的上下两部分的一个数值.如果列表数据的个数是奇数,则列表中间那个数据就是列表数据的中位数:如果列表数据的个数是偶数,则列表中间那2个数据的算术平均值就是列表数据的中位 ...

  6. 【Python】【面试必看】Python笔试题

    前言 现在面试测试岗位,一般会要求熟悉一门语言(python/java),为了考验求职者的基本功,一般会出 2 个笔试题,这些题目一般不难,主要考察基本功.要是给你一台电脑,在编辑器里面边写边调试,没 ...

  7. Python面试题整理-更新中

    几个链接: 编程零基础应当如何开始学习 Python ? - 路人甲的回答 网易云课堂上有哪些值得推荐的 Python 教程? - 路人甲的回答 怎么用最短时间高效而踏实地学习 Python? - 路 ...

  8. python 面试题4

    Python面试题 基础篇 分类: Python2014-08-08 13:15 2071人阅读 评论(0) 收藏 举报 最近,整理了一些python常见的面试题目,语言是一种工具,但是多角度的了解工 ...

  9. 一道Python面试题

    无意间,看到这么一道Python面试题:以下代码将输出什么? def testFun():    temp = [lambda x : i*x for i in range(4)]    return ...

  10. 【剑指offer】面试题 9. 用两个栈实现队列

    面试题 9. 用两个栈实现队列 题目描述 题目:用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型. 解答过程 import java.util.Stack; publ ...

随机推荐

  1. 初探内核之《Linux内核设计与实现》笔记上

    内核简介  本篇简单介绍内核相关的基本概念. 主要内容: 单内核和微内核 内核版本号 1. 单内核和微内核   原理 优势 劣势 单内核 整个内核都在一个大内核地址空间上运行. 1. 简单.2. 高效 ...

  2. 原生js使用getComputedStyle方法获取CSS内部属性值

    在对网页进行调试的过程中,经常会用到js来获取元素的CSS样式, 1.下面的方法只能JS只能获取写在html标签中的写在style属性中的值(style=”…”),而无法获取定义在<style ...

  3. VUE--插值的操作

    一.vue常见的指令 v-once:保留第一次渲染结果 v-html :把html代码解析,只显示内容 v-pre :原样输出 v-cloak :解决文本闪烁问题 v-text :显示文本 二.v-b ...

  4. 无 PowerShell.exe 执行 Empire 的几种姿势

    在实战中,Empire成为域渗透.后渗透阶段一大利器,而Empire是一个Powershell RAT,所以PowerShell必须要能运行Empire中几乎所有的启动方法都依赖于使用PowerShe ...

  5. Neo4j:图数据库GraphDB(二)高级查找

    接着上一篇,继续介绍图数据库Neo4j: http://www.cnblogs.com/rongyux/p/5537028.html 三 高级查找操作 1过滤   name = "Tom H ...

  6. javascript 对象和字符串互转

    Object  =>  String : console.log(JSON.stringify(e)); String => Object : JSON.parse(str)

  7. [LUOGU3413] SAC#1 - 萌数

    题目背景 本题由世界上最蒟蒻最辣鸡最撒比的SOL提供. 寂月城网站是完美信息教室的官网.地址:http://191.101.11.174/mgzd . 题目描述 辣鸡蒟蒻SOL是一个傻逼,他居然觉得数 ...

  8. Linux面试题-8

    1.Linux文件系统的文件都按其作用分门别类地放在相关的目录中,对于磁盘这种外部设备文件,一般应将其放在(C)目录中. A./bin B./etc C./dev D./lib 2.当使用mount进 ...

  9. git clone下代码window与unix换行问题

    项目中避免不了会写一些shell脚本,使用ln软连接到一个目录.当git clone到windows中,ln连接显示无比怪异(如../xx),打开.sh文件后(仅仅是打开了),git status会看 ...

  10. Netty源码分析之ChannelPipeline(一)—ChannelPipeline的构造与初始化

    Netty中ChannelPipeline实际上类似与一条数据管道,负责传递Channel中读取的消息,它本质上是基于责任链模式的设计与实现,无论是IO事件的拦截器,还是用户自定义的ChannelHa ...