本文将使用python实现数据结构中的栈、队列;有关栈、队列的理论原理请参考:《数据结构与算法》-3-栈和队列;


1. 栈的Python实现

1.1 以列表的形式简单实现栈

"""
以列表的形式简单实现栈
栈:先进后出
"""
class Stack:
def __init__(self):
self.stack = [] # 初始化 def is_empty(self):
return not bool(self.stack) # 判空 def push(self, value):
self.stack.append(value) # 入栈
return True def pop(self):
if self.stack:
return self.stack.pop() # 出栈
else:
raise LookupError('stack is empty!') def peek(self):
if self.stack:
return self.stack[-1] # 获取栈顶元素
else:
raise LookupError('stack is empty') def length(self):
return len(self.stack) # 获取栈内元素个数

1.2 以单链表形式实现栈

"""
以单链表形式实现栈
栈:先进后出
"""
class Node:
def __init__(self, val=None, nxt=None):
self.value = val # 信息域
self.next = nxt # 指针域 class Stack:
# 初始化一个空栈
def __init__(self):
self._top = None # 栈顶元素 def is_empty(self):
return self._top is None def push(self, item):
if not self._top:
self._top = Node(item) # 空栈:直接将新结点设置为栈顶元素
return True
node = self._top # 获取栈顶元素
self._top = Node(item) # 将新结点设置为栈顶元素
self._top.next = node # 将栈顶元素的指针指向原栈顶元素
return True def pop(self):
if self.is_empty():
raise LookupError('stack is empty!')
node = self._top # 获取栈顶元素
self._top = self._top.next # 将原栈顶元素的下一个元素设置为栈顶元素
return node.value # 返回原栈顶元素的信息域 def peek(self):
if self.is_empty():
raise LookupError('stack is empty!')
node = self._top # 获取栈顶元素
return node.value # 返回栈顶元素的信息域 def length(self):
if self.is_empty():
return 0
node = self._top # 获取栈顶元素
count = 1 # 计数
while node.next: # 栈顶元素的下一个元素,直到初始None
node = node.next
count += 1
return count def stack_to_list(self):
if self.is_empty():
return []
node = self._top # 获取栈顶元素
li = [node.value]
while node.next:
node = node.next
li.append(node.value)
return li[::-1] # 按照进栈的顺序,先后在列表中排列

2. 队列的Python实现

2.1 以列表实现简单队列

"""
以列表的形式简单实现队列
队列:先进先出
"""
class Queue:
def __init__(self):
self.li = [] def is_empty(self):
return not bool(self.li) def enqueue(self, items):
self.li.append(items)
return True def dequeue(self):
if self.is_empty():
raise LookupError('queue is empty!')
return self.li.pop(0) def length(self):
return len(self.li) def show(self):
if self.is_empty():
raise LookupError('queue is empty!')
return self.li

2.2 以单链表形式实现队列

"""
以链表的形式实现队列
""" class Node:
def __init__(self, val=None, nxt=None):
self.value = val # 数据域
self.next = nxt # 指针域 class Queue:
def __init__(self):
self.first = None # 头指针,指向队头结点
self.last = None # 尾指针,指向队尾结点
self.size = 0 # 表示队列内的结点数 def is_empty(self):
return self.first is None # 判空 def enqueue(self, items):
node = Node(items) # 创建新结点
self.size += 1 # 结点个数加1
if self.is_empty():
self.first = self.last = node # 加入第一个结点
return True
self.last.next = node # 队尾结点的指针域指向新结点
self.last = node # 尾指针指向队尾结点
return True def dequeue(self):
if self.is_empty():
raise LookupError('queue is empty!')
node = self.first # 需要返回的队头结点
self.first = node.next # 队头指针指向新队头结点
self.size -= 1
return node.value def length(self):
return self.size def queue_to_list(self):
if self.is_empty(): # 判空
return []
first_ = self.first
node = self.first
li = [node.value]
while node.next:
node = node.next
li.append(node.value)
return li # 按照的进队列的顺序,在列表中排列

Python实现栈、队列的更多相关文章

  1. 用python实现栈/队列/双端队列/链表

    栈是元素的有序集合,添加操作与移除操作都发生在其顶端,先进后出栈操作:创建空栈,增删(顶端),查(顶端元素,元素个数,是否为空)应用:将十进制数转换成任意进制数 class Stack: # 用列表创 ...

  2. 使用python实现栈和队列

    1.使用python实现栈: class stack(): def __init__(self): self.stack = [] def empty(self): return self.stack ...

  3. 【DataStructure In Python】Python模拟栈和队列

    用Python模拟栈和队列主要是利用List,当然也可以使用collection的deque.以下内容为栈: #! /usr/bin/env python # DataStructure Stack ...

  4. python数据结构-数组/列表/栈/队列及实现

    首先 我们要分清楚一些概念和他们之间的关系 数组(array)  表(list)  链表(linked list)  数组链表(array list)   队列(queue)  栈(stack) li ...

  5. Python 实现栈与队列

    #基于Python2.7 #基于顺序表实现 #发现用Python写题时,没有像写C++时方便的STL可用,不过查阅资料之后发现用class实现也很简洁,不过效率应该不是很高 Python实现栈并使用: ...

  6. python之 栈与队列

    忍不住想报一句粗口"卧槽"这尼玛python的数据结构也太特么方便了吧 想到当初学c语言的数据结构的时候,真的是一笔一划都要自己写出来,这python尼玛直接一个模块就ok 真的是 ...

  7. Python全栈【Socket网络编程】

    Python全栈[socket网络编程] 本章内容: Socket 基于TCP的套接字 基于UDP的套接字 TCP粘包 SocketServer 模块(ThreadingTCPServer源码剖析) ...

  8. python 全栈开发,Day43(python全栈11期月考题)

    python全栈11期月考题 1.常用字符串格式化有哪些?并说明他们的区别 2.请手写一个单例模式(面试题) 3.利用 python 打印前一天的本地时间,格式为‘2018-01-30’(面试题) 4 ...

  9. 老男孩Python全栈第2期+课件笔记【高清完整92天整套视频教程】

    点击了解更多Python课程>>> 老男孩Python全栈第2期+课件笔记[高清完整92天整套视频教程] 课程目录 ├─day01-python 全栈开发-基础篇 │ 01 pyth ...

  10. python 全栈之路

    目录 Python 全栈之路 一. Python 1. Python基础知识部分 2. Python -函数 3. Python - 模块 4. Python - 面对对象 5. Python - 文 ...

随机推荐

  1. 关于wx.redirectTo、wx.navigateTo失效问题

    问题:在app.json页面中若配置了tabBar,并且要跳转的目标页面也在tabBar中时,那么常用的几种页面跳转方式便失效了.即不能跳转到tabBar中定义的页面. 解决办法:若要跳转至tabBa ...

  2. ftl总结

    当前项目前端是用freemarker,是第一次使用这种页面,一般语法不介绍,这里只是记录工作中遇到的问题 ---------2016.6.25-------------- 1.关于ftl字符串的问题 ...

  3. 【AWS】亚马逊云常用服务解释

    新公司使用的是亚马逊服务,刚开始的时候,对很多名词不太明白,总结了一下如下 1,EC2 这个是亚马逊的一种服务器服务,可以理解为跟vmware差不多,EC2为虚拟机提供载体,EC2上跑虚拟机服务器. ...

  4. 基于欧氏距离和马氏距离的异常点检测—matlab实现

    前几天接的一个小项目,基于欧氏距离和马氏距离的异常点检测,已经交接完毕,现在把代码公开. 基于欧式距离的: load data1.txt %导入数据,行为样本,列为特征 X=data1; %赋值给X ...

  5. zabbix simple check

    摘自: http://www.ttlsa.com/zabbix/zabbix-simple-checks/ 1. 开始 Simple checks通常用来检查远程未安装代理或者客户端的服务 使用sim ...

  6. python类初探

    class human: is_alive=True is_man=True def __init__(self,age): print('this is __init__() method, whi ...

  7. html5 canvas画饼

    1. [图片] lxdpie.jpg ​2. [文件] lqdpie.html ~ 801B     下载(7) <!DOCTYPE HTML PUBLIC "-//W3C//DTD ...

  8. Smarty模板重点汇总

    Smarty模板重点回顾:1.功能:前后端分离:2.实现方法:通过使用Smarty的核心类来实现,利用display方法来读取模板文 件,用正则进行替换,替换完保存到临时文件,再将临时文件加载到当前页 ...

  9. MyBatis映射文件中用#和$传递参数的特点

    在MyBatis映射文件中用#和$传递参数的特点, #是以占位符的形式来传递对应变量的参数值的,框架会对传入的参数做预编译的动作, 用$时会将传入的变量的参数值原样的传递过去,并且用$传递传递参数的时 ...

  10. listen 60

    Barbie Exposure May Limit Girls' Career Imagination The ubiquitous Barbie doll: she's been everythin ...