网站建设资讯

NEWS

网站建设资讯

python压栈函数,c语言函数压栈

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中的堆栈什么意思

堆栈是一种执行“后进先出”算法的数据结构。

设想有一个直径不大、一端开口一端封闭的竹筒。有若干个写有编号的小球,小球的直径比竹筒的直径略小。现在把不同编号的小球放到

竹筒里面,可以发现一种规律:先放进去的小球只能后拿出来,反之,后放进去的小球能够先拿出来。所以“先进后出”就是这种结构的

特点。

堆栈是计算机中最常用的一种数据结构,比如函数的调用在计算机中是用堆栈实现的。 堆栈可以用数组存储,也可以用以后会介绍的链

表存储。

堆栈就是这样一种数据结构。它是在内存中开辟一个存储区域,数据一个一个顺序地存入(也就是“压入——push”)这个区域之中。

有一个地址指针总指向最后一个压入堆栈的数据所在的数据单元,存放这个地址指针的寄存器就叫做堆栈指示器。开始放入数据的单元叫

做“栈底”。数据一个一个地存入,这个过程叫做“压栈”。在压栈的过程中,每有一个数据压入堆栈,就放在和前一个单元相连的后面

一个单元中,堆栈指示器中的地址自动加1。读取这些数据时,按照堆栈指示器中的地址读取数据,堆栈指示器中的地址数自动减 1。这

个过程叫做“弹出pop”。如此就实现了后进先出的原则。

推荐学习《python教程》。

程序开发中创建一个空表压栈函数是什么呢?

void lua_createtable (lua_State *L, int narr, int nrec);

上面这个函数就是创建一张新的空表压栈。 

1.参数 narr 建议了这张表作为序列使用时会有多少个元素; 参数 nrec 建议了这张表可能拥有多少序列之外的元素。 Lua 会使用这些建议来预分配这张新表。 如果你知道这张表用途的更多信息,预分配可以提高性能。 否则,你可以使用函数 lua_newtab

把函数导出成二进制代码块 。 函数接收栈顶的 Lua 函数做参数, 然后生成它的二进制代码块。 若被导出的东西被再次加载, 加载的结果就相当于原来的函数。 当它在产生代码块的时候, lua_dump 通过调用函数 writer 来写入数据,后面的 data 参数会被传入 writer 。

如果 strip 为真, 二进制代码块将不包含该函数的调试信息。

最后一次由 writer 的返回值将作为这个函数的返回值返回; 0 表示没有错误。

该函数不会把 Lua 函数弹出堆栈。

int lua_error (lua_State *L);

以栈顶的值作为错误对象,抛出一个 Lua 错误。 这个函数将做一次长跳转,所以一定不会返回

lua_Alloc lua_getallocf (lua_State *L, void **ud);

返回给定状态机的内存分配器函数。 如果 ud 不是 NULL , Lua 把设置内存分配函数时设置的那个指针置入 *ud 。

lua_getfield

[-0, +1, e]

int lua_getfield (lua_State *L, int index, const char *k);

把 t[k] 的值压栈, 这里的 t 是索引指向的值。 在 Lua 中,这个函数可能触发对应 "index" 事件对应的元方法 。

函数将返回压入值的类型。

lua_getextraspace

[-0, +0, –]

void *lua_getextraspace (lua_State *L);

返回一个 Lua 状态机中关联的内存块指针。 程序可以把这块内存用于任何用途;而 Lua 不会使用它。

每一个新线程都会携带一块内存, 初始化为主线程的这块内存的副本。

默认配置下,这块内存的大小为空指针的大小。 不过你可以重新编译 Lua 设定这块内存不同的大小。


网站栏目:python压栈函数,c语言函数压栈
网页URL:http://cdweb.net/article/dssecpd.html