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入栈出栈函数,进栈出栈函数
当前地址:http://azwzsj.com/article/hesppp.html