Python实现堆栈和队列详解

python实现堆栈

堆栈是一个后进先出的数据结构,其工作方式就像一堆汽车排队进去一个死胡同里面,最先进去的一定是最后出来。

我们可以设置一个类,用列表来存放栈中元素的信息,利用列表的append()和pop()方法可以实现栈的出栈pop和入栈push的操作,list.append(obj)意思是向列表添加一个对象obj,list.pop(index=-1)意思是删除指定位置的对象,默认是最后一个对象,也就是说list.pop(),是删除列表中下标最大的元素。可先将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()

python 实现队列

队列是一种先进先出的数据类型,它的跟踪原理类似于在超市收银处排队,队列里的的第一个人首先接受服务,新的元素通过入队的方式添加到队列的末尾,而出队就是将队列的头元素删除。

   我们可以设置一个类,用列表来存放栈中元素的信息,利用列表的append()和pop()方法可以实现队列的入队enqueue和出队dequeue的操作,上面栈一个元素每次出去是列表的最后一个,直接用list.pop()出栈,而出队列每次是第一个,所以要用list.pop(0)出队列

代码如下:

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()

  • 初学者学习python2还是python3?
  • python获取本机IP、mac地址、计算机名
  • 详解python2 和 python3的区别
  • python基础之删除文件及删除目录的方法
  • 用python求第1000个质数的值
  • python常用函数年初大总结
  • Python3 - 时间处理与定时任务
  • Python开发的CMS系统,Silva CMS 3 发布
  • python基础之使用os.system来执行系统命令
  • 判断python字典中key是否存在的两种方法
  • 初学者学习python2还是python3?
  • python基础之删除文件及删除目录的方法
  • python获取本机IP、mac地址、计算机名
  • python获取系统时间(时间函数详解)
  • 详解python2 和 python3的区别
  • 用python求第1000个质数的值
  • Python3 - 时间处理与定时任务
  • 命令行看糗百
  • Python算法之---冒泡,选择,插入排序算法
  • python 中求和函数 sum详解
  • range方法在Python2和Python3中的不同
  • python3 数组(列表)初始化
  • 记一次crontab中date命令错用导致的问题
  • MySQL用LIKE特殊字符搜索
  • CentOS 7 下修改主机名
  • Python3正则表达式之:(?(id/name)y...
  • TIOBE编程语言排行榜2019年 Python稳居前三
  • 解压命令unzip常用方法汇总
  • 解析redis备份文件rdb的两种方法及对比
  • 百度视觉语义化平台2.0:交互升级和...
  • 5G时代的视觉语义化技术:软硬结合...
  • 百度AutoDL重磅升级至3.0:设计、迁...