本题目摘自《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. Hyper-V 下linux虚拟机静态IP上网配置的两种方式(1)

    工作需要,搭建linux环境,网上搜了两种Hyper-V配置linux静态IP及上网的方式,记录一下,方便查阅,如下是桥接方式的配置: 本实例所用的各项资源说明,系统是windows10企业版64bi ...

  2. C#输入中文实现转拼音首字母(亲测,字库不全)

    public string GetPYString(string str) { string tempStr = ""; foreach (char c in str) { if ...

  3. 爬虫破解知乎登入(不使用Selenium模块)

    一.分析 知乎完成登入的步骤 首先获得cookies(如果不获得后面验证码无法获得) 获得验证码 提交登入相关内容 前两步简单稍微细心寻找规律即可 其中最难的是第三步应该他前端进行了js加密 这里没什 ...

  4. PowerUp攻击模块实战

    PowerUp攻击模块实战   1.将PowerUp.ps1脚本上传至目标服务器,然后在本地执行 2.使用IEX在内存中加载此脚本,执行以下命令,脚本将进行所有的检查. powershell.exe ...

  5. PHP range

    1.函数的作用:生成范围内的数据 2.函数的参数: @param mixed $start @param mixed $end @param mixed $step 3.例子: <?php $n ...

  6. [JZOJ5818] 【NOIP提高A组模拟2018.8.15】 做运动

    Description 一天,Y 君在测量体重的时候惊讶的发现,由于常年坐在电脑前认真学习,她的体重有了突 飞猛进的增长. 幸好 Y 君现在退役了,她有大量的时间来做运动,她决定每天从教学楼跑到食堂来 ...

  7. Docker卷

    要解决的问题:在移除了现有容器或者添加了新容器时,之前容器的数据无法访问. 为避免上述问题,Docker提供了以下策略来持久化数据 tmpfs挂载 绑定挂载 卷 1.tmpfs挂载 2.绑定挂载 将D ...

  8. Python编程系列---装饰器执行的底层原理及流程

    代码中No.1  No.2 ...表示执行流程 """No.1 No.2 ...表示执行流程""" def set_func(func): ...

  9. shell数组(四)

    [root@ipha-dev71- exercise_shell]# cat test.sh #!/bin/bash my_array=(a b c d) echo "第一个元素为:${my ...

  10. java读取存在src目录下和存在同级目录下的配置文件

    如果我有个文件存在src下一级的地方和存在src同级的目录应该怎么用相对路径去获取如图: 一.如果存在src同级的地方应该是InputStream in = new BufferedInputStre ...