本文将使用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. 快速学习Symfony4,Symfony4教程

    快速学习Symfony4,Symfony4教程https://symfony.com/doc/current/index.html 关注公众号回复Symfony4教程,Symfony4教程视频,或访问 ...

  2. ABAP-创建客户

      CALL METHOD CMD_EI_API=>MAINTAIN_BAPI FUNCTION Z_CS_RFC_OA002 . *"------------------------ ...

  3. Android/iOS Remote debugging

    简单介绍 使用下面方法可以定位webview中的元素,无法定位view中的元素. 原文地址:http://mp.weixin.qq.com/s/y_UfdgjT_pkKgYivJmqt7Q webvi ...

  4. LeetCode:砖墙【554】

    LeetCode:砖墙[554] 题目描述 你的面前有一堵方形的.由多行砖块组成的砖墙. 这些砖块高度相同但是宽度不同.你现在要画一条自顶向下的.穿过最少砖块的垂线. 砖墙由行的列表表示. 每一行都是 ...

  5. 【Leetcode-easy】Reverse Integer

    思路:取绝对值,反转,并判断反转的结果是否大于最大整数,需要注意的细节:判断时需要这样:result > (Integer.MAX_VALUE - v) / 10 否则result * 10 + ...

  6. 一次react滚动列表的实践---兼容ios安卓

    一.背景 近期项目改版,对原有的h5页面进行了重新设计,数据呈现变成了瀑布流.希望新版兼容ios和安卓两端的情况下,无限制的刷新加载数据.大致效果如下: 整个页面分4部分: 顶部导航 步数状态卡片 用 ...

  7. nodejs中的子进程,深入解析child_process模块和cluster模块

    Node.js的进程管理   node遵循的是单线程单进程的模式,node的单线程是指js的引擎只有一个实例,且在nodejs的主线程中执行,同时node以事件驱动的方式处理IO等异步操作.node的 ...

  8. python正则表达提取文本好文

    摘自: http://www.cnblogs.com/rj81/p/5933838.html

  9. 存储过程IF --ELSE IF -- END IF 使用

    CREATE OR REPLACE PROCEDURE BJPJYXK_HF_SD( sqid_p IN VARCHAR2,--申请单ID xkbh_p IN VARCHAR2,--新生成的许可证编号 ...

  10. 存储过程之rowtype 使用

    CREATE OR REPLACE PROCEDURE "DYLYLQX_SC_BA_1" (YWID IN VARCHAR2, FLAG OUT VARCHAR2) IS V_R ...