资讯

精准传达 • 有效沟通

从品牌网站建设到网络营销策划,从策略到执行的一站式服务

Python入栈出栈函数,进栈出栈函数

python 语法 出栈进栈 全局变量的问题

我这里显示的3,不知到你那是不是哪里出了问题。

创新互联建站是一家以网络技术公司,为中小企业提供网站维护、成都网站设计、成都做网站、网站备案、服务器租用、域名注册、软件开发、微信小程序开发等企业互联网相关业务,是一家有着丰富的互联网运营推广经验的科技公司,有着多年的网站建站经验,致力于帮助中小企业在互联网让打出自已的品牌和口碑,让企业在互联网上打开一个面向全国乃至全球的业务窗口:建站欢迎咨询:028-86922220

这个是作用域的关系,sBuf你是在全局作用域中调用的,所以不需要使用global声明的。

你定义的方法没有问题,不知道你说的正确是什么意思。

[0 for _ in xrange(10)],再好的你说的使用标准库方法吧,

map(lambda x, y: 0, range(10), [])

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

如果未解决请继续追问

分别写函数实现初始化栈、入栈、出栈、判断栈空、判断栈满。例如入栈序列为1 2 3 4 5,出栈则为5 4 3 2 1

1、初始化栈

/*功能:初始化栈

*函数名:InitStack

*返回值:void

*/

void InitStack(stack *p)

{

p-top=-1;

}

2、判断栈为满

/*功能:判断栈为满

*函数名:IsFull

*返回值:为满——真1,非满——假0

*/

BOOL IsFull(stack *p)

{

if(MAXSIZE-1==p-top)

{

return TRUE;

}else

{

return FALSE;

}

}

3、判断栈为空

/*功能:判断栈为空

* 函数名:IsEmpty

*返回值:为空——真1,非空——假0

*/

BOOL IsEmpty(stack *p)

{

if(-1==p-top)

{

return TRUE;

}else

{

return FALSE;

}

}

4、进栈

/*功能:进栈

*函数名:push

*返回值:成功TRUN 失败FALSE

*注:不能为满,否则进栈失败

*/

BOOL push(stack *p,StackType data)//p=s

{

//判断栈是否为满

if(TRUE==IsFull(p))//为满

{

return FALSE;//返回失败

}

p-buf[++p-top]=data;

return TRUE;//返回成功

}

5、出栈

/*功能:出栈

*函数名:pop

*返回值:出栈成功TRUE 失败FALSE

*/

BOOL pop(stack *p,StackType *pd)

{

//判断是否为空,为空出栈无意义

if(TRUE==IsEmpty(p))

{

return FALSE;//出栈失败

}

*pd=p-buf[p-top--];//优先级-大于--

return TRUE;//出栈成功

}

扩展资料:

主函数:

void main()

{

//定义变量:类型 变量名

//struct st s;

struct st s;//分配空间

//初始化

InitStack(s);

int num=0;

printf("请输入");

scanf("%d",num);

//求二进制

while(num!=0)

{

//将余数入栈

if(FALSE==push(s,num%2))

{

return;//结束

}

num/=2;

}

//将二进制结果取出来

char value=0;

while(FALSE!=pop(s,value))

{

printf("%d",value);

}

printf("\n");

}

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答疑:关于队列出栈和入栈的,报错是why?

没有问题啊 你的代码缩进有问题吧:

class MyStack(object):

def __init__(self, max):

self.head = -1

self.stack = list()

self.max = max

for i in range(self.max):

self.stack.append(0)

def put(self, item):

if self.head = self.max:                      

return 'Put Error: The Stack is Overflow!'  

else:

self.head += 1                             

self.stack[self.head] = item

print 'Put %s Success' % item

def get(self):

if self.head  0:                             

return 'Get Error: The Stack is Empty!'     

else:

self.head -= 1                             

return self.stack[self.head+1]

def isEmpty(self):

if self.head  -1:

return True

return False

if __name__ == "__main__":

mystack = MyStack(100)

mystack.put('a')

mystack.put('b')

print mystack.get()

mystack.put('c')

print mystack.get()

print mystack.get()

print mystack.get()

出栈和入栈的实现 上机题

#include"stdio.h"

#include"malloc.h"

#include"iostream"

using namespace std;

typedef int selemtype;

typedef struct

{

selemtype *base;

selemtype *top;

int size;

}sqstack;

void initstack(sqstack s)

{

s.top = (selemtype*)malloc(10*sizeof(selemtype));

s.base = s.top;

s.size = 10;

}

void push(sqstack s,selemtype e)

{

s.top ;

*s.top = e;

}

void pop(sqstack s)

{

cout(*s.top);

s.top--;

}

int main()

{

sqstack s;

selemtype x;

initstack(s);

cout"input the data"endl;

cinx;

while(x)

{

push(s,x%2);

x = x/2;

}

cout"output the data"endl;

while(s.base != s.top)

{

out(s);

}

coutendl;

system("pause");

return 0;

}


本文名称:Python入栈出栈函数,进栈出栈函数
网站URL:http://cdkjz.cn/article/hesppp.html
多年建站经验

多一份参考,总有益处

联系快上网,免费获得专属《策划方案》及报价

咨询相关问题或预约面谈,可以通过以下方式与我们联系

业务热线:400-028-6601 / 大客户专线   成都:13518219792   座机:028-86922220