Python实现栈、队列
本文将使用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实现栈、队列的更多相关文章
- 用python实现栈/队列/双端队列/链表
栈是元素的有序集合,添加操作与移除操作都发生在其顶端,先进后出栈操作:创建空栈,增删(顶端),查(顶端元素,元素个数,是否为空)应用:将十进制数转换成任意进制数 class Stack: # 用列表创 ...
- 使用python实现栈和队列
1.使用python实现栈: class stack(): def __init__(self): self.stack = [] def empty(self): return self.stack ...
- 【DataStructure In Python】Python模拟栈和队列
用Python模拟栈和队列主要是利用List,当然也可以使用collection的deque.以下内容为栈: #! /usr/bin/env python # DataStructure Stack ...
- python数据结构-数组/列表/栈/队列及实现
首先 我们要分清楚一些概念和他们之间的关系 数组(array) 表(list) 链表(linked list) 数组链表(array list) 队列(queue) 栈(stack) li ...
- Python 实现栈与队列
#基于Python2.7 #基于顺序表实现 #发现用Python写题时,没有像写C++时方便的STL可用,不过查阅资料之后发现用class实现也很简洁,不过效率应该不是很高 Python实现栈并使用: ...
- python之 栈与队列
忍不住想报一句粗口"卧槽"这尼玛python的数据结构也太特么方便了吧 想到当初学c语言的数据结构的时候,真的是一笔一划都要自己写出来,这python尼玛直接一个模块就ok 真的是 ...
- Python全栈【Socket网络编程】
Python全栈[socket网络编程] 本章内容: Socket 基于TCP的套接字 基于UDP的套接字 TCP粘包 SocketServer 模块(ThreadingTCPServer源码剖析) ...
- python 全栈开发,Day43(python全栈11期月考题)
python全栈11期月考题 1.常用字符串格式化有哪些?并说明他们的区别 2.请手写一个单例模式(面试题) 3.利用 python 打印前一天的本地时间,格式为‘2018-01-30’(面试题) 4 ...
- 老男孩Python全栈第2期+课件笔记【高清完整92天整套视频教程】
点击了解更多Python课程>>> 老男孩Python全栈第2期+课件笔记[高清完整92天整套视频教程] 课程目录 ├─day01-python 全栈开发-基础篇 │ 01 pyth ...
- python 全栈之路
目录 Python 全栈之路 一. Python 1. Python基础知识部分 2. Python -函数 3. Python - 模块 4. Python - 面对对象 5. Python - 文 ...
随机推荐
- Dijkstra的堆优化
先附上一个例题:P3371 [模板]单源最短路径 一眼扫去,最短路... spfa可行,但是今天的主题是Dijkstra: #include<iostream> #include<a ...
- pinpoint本地开发-web模块
web模块中的前端依赖会导致工程很难打包成功,对于这些,我们可以直接注释掉 比如: <plugin> <groupId>com.github.eirslett</grou ...
- Codeforces 854B Maxim Buys an Apartment:贪心
题目链接:http://codeforces.com/contest/854/problem/B 题意: 有n栋房子从1到n排成一排,有k栋房子已经被售出. 现在你要买一栋“好房子”. 一栋房子是“好 ...
- RQNOJ 569 Milking Time:dp & 线段问题
题目链接:https://www.rqnoj.cn/problem/569 题意: 在一个数轴上可以摆M个线段,每个线段的起始终止端点给定(为整数),且每个线段有一个分值,问如何从中选取一些线段使得任 ...
- APIO2018爆零记
Day1 集合 7点和yyc他们在学校简单的集合了一下 在大通道看到了整个年级来上操 嘲讽了一番就大摇大摆的走出了校门 校门口看无迟到周的权益部长lzj同学满眼的羡慕 2333 然后到了裕龙酒店登记入 ...
- POJ3468 A Simple Problem with Integers(数状数组||区间修改的RMQ问题)
You have N integers, A1, A2, ... , AN. You need to deal with two kinds of operations. One type of op ...
- MySQL_杭州拱墅区、西湖区近9-11月销售过的产品_20161125
需求:杭州拱墅区.西湖区近9-11月销售过的产品 这个SQL如果对数据表熟悉的话可以一步到位,为了看的更清楚,时间间隔在3个月产品数量也不是很多,采取先找明细再进行汇总. 一.第一种写法 分步骤的写S ...
- DataGrid当列宽超出当前宽度时,没有数据也恒有滚动条
附件是DataGrid支持滚动条的文件. 具体使用如下: 1)DataGrid使用控件模板 <Setter Property="Template" Value="{ ...
- VIJOS:P1082丛林探险
描述 东非大裂谷中有一片神秘的丛林,是全世界探险家的乐园,著名黄皮肤探险家BB一直想去试试.正好我国科学家2005年4月将首次对东非大裂谷进行科考,BB决定随科考队去神秘丛林探险.在出发之前,他搜集了 ...
- Scala学习——泛型[T]的6种使用(初)
package com.dtspark.scala.basics /** * 1,scala的类和方法.函数都可以是泛型. * * 2,关于对类型边界的限定分为上边界和下边界(对类进行限制) * 上边 ...