栈函数python 栈函数的源代码

python中栈和队列在功能上的区别

python queue模块有三种队列:1、python queue模块的FIFO队列先进先出。2、LIFO类似于堆。即先进后出。3、还有一种是优先级队列级别越低越先出来。 针对这三种队列分别有三个构造函数:1、class Queue.Queue(maxsize) FIFO 2、class Queue.LifoQueue(maxsize) LIFO 3、class Queue.PriorityQueue(maxsize) 优先级队列

创新互联是一家朝气蓬勃的网站建设公司。公司专注于为企业提供信息化建设解决方案。从事网站开发,网站制作,网站设计,网站模板,微信公众号开发,软件开发,小程序设计,10余年建站对砂岩浮雕等多个领域,拥有丰富的网站维护经验。

Python数据结构与算法-利用列表实现栈

概念:

栈:

名称的由来:这个名字来源于自动售货机中用弹簧顶住的一堆盘子的隐喻。

概念:这里提到的栈是一种抽象的数据结构

,而非空间内存分配处涉及的空间存储的概念。但是大同小异,原理还是来自于对栈空间的理解。这里的栈是有一系列对象组成的一个集合,这些对象的插入和删除操作遵循后进先出(LIFO)原则。用户可以在任意时刻向栈中插入一个对象,但只能取得或者删除最后一个插入的对象(即所谓的栈顶)。

目的:通过列表实现栈

有些同学可能认为,是不是还有其他操作没有完成,为什么不能在中间插入或者其他操作,因为栈不具备这些功能,所以实现的都是栈的常规功能。

利用栈实现数据的逆置

由于LIFO协议的限制,栈可以用作一种通用的工具,用于实现一个数据序列的逆置,这一思想可以用于很多方面,例如以降序

的方式显示一个数据集,我们可以通过先逐行读取数据,然后压如一个栈中,在按照从栈中弹出的顺序来写入。这个方法的实现过程如下:

python 中建栈如何pop出不是最后一个元素

python中你可以使用list模拟栈数据结构,list自带pop函数,默认为获取最后一个元素,但是可以通过指定索引值pop(i),获取指定位置的元素。

如果元素索引错误,抛出IndexError异常。

如果解决了您的问题请采纳!

如果未解决请继续追问

python实现堆栈与队列的方法

python实现堆栈与队列的方法

本文实例讲述了python实现堆栈与队列的方法。分享给大家供大家参考。具体分析如下:

1、python实现堆栈,可先将Stack类写入文件stack.py,在其它程序文件中使用from stack import Stack,然后就可以使用堆栈了。

stack.py的程序:

代码如下:class Stack():

def __init__(self,size):

self.size=size;

self.stack=[];

self.top=-1;

def push(self,ele): #入栈之前检查栈是否已满

if self.isfull():

raise exception("out of range");

else:

self.stack.append(ele);

self.top=self.top+1;

def pop(self): # 出栈之前检查栈是否为空

if self.isempty():

raise exception("stack is empty");

else:

self.top=self.top-1;

return self.stack.pop();

def isfull(self):

return self.top+1==self.size;

def isempty(self):

return self.top==-1;

再写一个程序文件,stacktest.py,使用栈,内容如下:

代码如下:#!/usr/bin/python

from stack import Stack

s=Stack(20);

for i in range(3):

s.push(i);

s.pop()

print s.isempty();

2、python 实现队列:

复制代码代码如下:class Queue():

def __init__(self,size):

self.size=size;

self.front=-1;

self.rear=-1;

self.queue=[];

def enqueue(self,ele): #入队操作

if self.isfull():

raise exception("queue is full");

else:

self.queue.append(ele);

self.rear=self.rear+1;

def dequeue(self): #出队操作

if self.isempty():

raise exception("queue is empty");

else:

self.front=self.front+1;

return self.queue[self.front];

def isfull(self):

return self.rear-self.front+1==self.size;

def isempty(self):

return self.front==self.rear;

q=Queue(10);

for i in range(3):

q.enqueue(i);

print q.dequeue();

print q.isempty();

希望本文所述对大家的Python程序设计有所帮助。

python堆和栈的区别有哪些

堆(Heap)与栈(Stack)是开发人员必须面对的两个概念,在理解这两个概念时,需要放到具体的场景下,因为不同场景下,堆与栈代表不同的含义。一般情况下,有两层含义:

(1)程序内存布局场景下,堆与栈表示的是两种内存管理方式;

(2)数据结构场景下,堆与栈表示两种常用的数据结构。

相关推荐:《Python教程》

堆与栈实际上是操作系统对进程占用的内存空间的两种管理方式,主要有如下几种区别:

(1)管理方式不同。栈由操作系统自动分配释放,无需我们手动控制;堆的申请和释放工作由程序员控制,容易产生内存泄漏;

(2)空间大小不同。每个进程拥有的栈的大小要远远小于堆的大小。理论上,程序员可申请的堆大小为虚拟内存的大小,进程栈的大小 64bits 的 Windows 默认 1MB,64bits 的 Linux 默认 10MB;

(3)生长方向不同。堆的生长方向向上,内存地址由低到高;栈的生长方向向下,内存地址由高到低。

(4)分配方式不同。堆都是动态分配的,没有静态分配的堆。栈有2种分配方式:静态分配和动态分配。静态分配是由操作系统完成的,比如局部变量的分配。动态分配由alloca函数进行分配,但是栈的动态分配和堆是不同的,他的动态分配是由操作系统进行释放,无需我们手工实现。

(5)分配效率不同。栈由操作系统自动分配,会在硬件层级对栈提供支持:分配专门的寄存器存放栈的地址,压栈出栈都有专门的指令执行,这就决定了栈的效率比较高。堆则是由C/C++提供的库函数或运算符来完成申请与管理,实现机制较为复杂,频繁的内存申请容易产生内存碎片。显然,堆的效率比栈要低得多。

(6)存放内容不同。栈存放的内容,函数返回地址、相关参数、局部变量和寄存器内容等。当主函数调用另外一个函数的时候,要对当前函数执行断点进行保存,需要使用栈来实现,首先入栈的是主函数下一条语句的地址,即扩展指针寄存器的内容(EIP),然后是当前栈帧的底部地址,即扩展基址指针寄存器内容(EBP),再然后是被调函数的实参等,一般情况下是按照从右向左的顺序入栈,之后是被调函数的局部变量,注意静态变量是存放在数据段或者BSS段,是不入栈的。出栈的顺序正好相反,最终栈顶指向主函数下一条语句的地址,主程序又从该地址开始执行。堆,一般情况堆顶使用一个字节的空间来存放堆的大小,而堆中具体存放内容是由程序员来填充的。

从以上可以看到,堆和栈相比,由于大量malloc()/free()或new/delete的使用,容易造成大量的内存碎片,并且可能引发用户态和核心态的切换,效率较低。栈相比于堆,在程序中应用较为广泛,最常见的是函数的调用过程由栈来实现,函数返回地址、EBP、实参和局部变量都采用栈的方式存放。虽然栈有众多的好处,但是由于和堆相比不是那么灵活,有时候分配大量的内存空间,主要还是用堆。

无论是堆还是栈,在内存使用时都要防止非法越界,越界导致的非法内存访问可能会摧毁程序的堆、栈数据,轻则导致程序运行处于不确定状态,获取不到预期结果,重则导致程序异常崩溃,这些都是我们编程时与内存打交道时应该注意的问题。

Python语言如何实现包含min函数的栈

仅供参考

# coding=utf8

'''

题目:定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的min函数。

在该栈中,调用min、push及pop的时间复杂度都是O(1)。

'''

class Stack():

def __init__(self):

self.main_stack = []

# 辅助栈,每次次最小的元素压入辅助栈

self.assist_stack = []

# 记录栈中的最小元素

self._min = None

def min(self):

return self._min

def push(self, data):

self.main_stack.append(data)

if self._min is None:

self._min = data

else:

if data self._min:

self._min = data

# 将最小的元素压入辅助栈

self.assist_stack.append(self._min)

def pop(self):

if len(self.main_stack) == 0:

raise Exception('no data')

elif len(self.main_stack) == 1:

self.assist_stack.pop()

self._min = None

return self.main_stack.pop()

else:

self.assist_stack.pop()

self._min = self.assist_stack[-1]

return self.main_stack.pop()

if __name__ == '__main__':

s = Stack()

s.push(3)

s.push(4)

s.push(2)

s.push(1)

print s.min()

s.pop()

s.pop()

print s.min()

s.pop()

print s.min()

s.pop()

print s.min()

s.pop()


分享文章:栈函数python 栈函数的源代码
URL地址:http://myzitong.com/article/docdsoi.html