python面试题2.1:如何实现栈
本题目摘自《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:如何实现栈的更多相关文章
- python公司面试题集锦 python面试题大全
问题一:以下的代码的输出将是什么? 说出你的答案并解释. class Parent(object): x = 1 class Child1(Parent): pass class Child2(Par ...
- 很全的 Python 面试题
很全的 Python 面试题 Python语言特性 1 Python的函数参数传递 看两个例子: Python 1 2 3 4 5 a = 1 def fun(a): ...
- python面试题六: 剑指offer
面试题3 二维数组中的查找 LeetCode题目:二维数组中,每行从左到右递增,每列从上到下递增,给出一个数,判断它是否在数组中思路:从左下角或者右上角开始比较 def find_integer(ma ...
- Python面试题_中级版
Python 面试题 1.Python是如何进行内存管理的 对象引用机制.垃圾回收机制.内存池机制 1.1对象引用机制 Python内部使用引用计数,来保持追踪内存中的对象,所有对象都有引用计数. 引 ...
- Python面试题 —— 获取列表中位数
中位数是一个可将数值集合划分为相等的上下两部分的一个数值.如果列表数据的个数是奇数,则列表中间那个数据就是列表数据的中位数:如果列表数据的个数是偶数,则列表中间那2个数据的算术平均值就是列表数据的中位 ...
- 【Python】【面试必看】Python笔试题
前言 现在面试测试岗位,一般会要求熟悉一门语言(python/java),为了考验求职者的基本功,一般会出 2 个笔试题,这些题目一般不难,主要考察基本功.要是给你一台电脑,在编辑器里面边写边调试,没 ...
- Python面试题整理-更新中
几个链接: 编程零基础应当如何开始学习 Python ? - 路人甲的回答 网易云课堂上有哪些值得推荐的 Python 教程? - 路人甲的回答 怎么用最短时间高效而踏实地学习 Python? - 路 ...
- python 面试题4
Python面试题 基础篇 分类: Python2014-08-08 13:15 2071人阅读 评论(0) 收藏 举报 最近,整理了一些python常见的面试题目,语言是一种工具,但是多角度的了解工 ...
- 一道Python面试题
无意间,看到这么一道Python面试题:以下代码将输出什么? def testFun(): temp = [lambda x : i*x for i in range(4)] return ...
- 【剑指offer】面试题 9. 用两个栈实现队列
面试题 9. 用两个栈实现队列 题目描述 题目:用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型. 解答过程 import java.util.Stack; publ ...
随机推荐
- Linux 命令之 chmod
命令格式 chmod有以下三种格式 chmod [-cfvR] MODE[,MODE]... FILE... chmod [-cfvR] OCTAL-MODE FILE... chmod [-cfvR ...
- C#学习--Oracle数据库基本操作(连接、增、删、改、查)封装
写在前面: SQLserver的C#封装:https://www.cnblogs.com/mexihq/p/11636785.html 类似于上篇有关SQLserver的C#封装,小编对Oracle数 ...
- Python分布式爬虫必学框架Scrapy打造搜索引擎 ✌✌
Python分布式爬虫必学框架Scrapy打造搜索引擎 ✌✌ (一个人学习或许会很枯燥,但是寻找更多志同道合的朋友一起,学习将会变得更加有意义✌✌) 第1章 课程介绍 介绍课程目标.通过课程能学习到 ...
- 【Python3爬虫】我爬取了七万条弹幕,看看RNG和SKT打得怎么样
一.写在前面 直播行业已经火热几年了,几个大平台也有了各自独特的“弹幕文化”,不过现在很多平台直播比赛时的弹幕都基本没法看的,主要是因为网络上的喷子还是挺多的,尤其是在观看比赛的时候,很多弹幕不是喷选 ...
- Django-admin站点管理的详细使用
使用Django的管理模块,需要按照如下步骤操作: 管理界面本地化 创建管理员 注册模型类 自定义管理页面 1 管理界面本地化 在settings.py中设置语言和时区 LANGUAGE_CODE = ...
- java23种设计模式(二)抽象工厂模式
我们接着上一章的工厂方法模式继续学习一下抽象工厂模式. 抽象工厂模式:在工厂模式中,如果有多个产品,则就是抽象工厂模式. 例子: 有一个工厂开了两个子公司,专门用来生产电脑配件键盘和鼠标,一个是联想工 ...
- msf假冒令牌
记录下 msf中令牌假冒的过程 环境 kai Linux 靶机 xp meterpreter得到一个返回的shell,test用户,假设无法提升至管理权限. 使用use incognito命令进入该模 ...
- DNS记录类型
A 记录: A (Address) 记录是用来指定主机名(或域名)对应的IP地址记录.用户可以将该域名下的网站服务器指向到自己的web server上.同时也可以设置您域名的子域名.通俗来说A记录就是 ...
- Git上传项目至GitHub
要使用github,首先需要下载git.安装git 1.先在github上创建一个git仓库,复制该github路径 2.用cmd进入一个目录 git clone github路径 从github上直 ...
- java集合之Vector向量基础
Vector向量: vector类似动态数组,向量和数组类似,但是数组容量一旦确定不可更改,而向量的容量可变.向量只可以保存任何类型对象且容量不限制,数组对元素类型无限制但是容量有限. 适用场合:向量 ...