栈:

 # -*- coding: utf-8 -*-
# @author: Tele
# @Time : 2019/04/24 下午 2:33
# 采用list(顺序表)实现栈结构,后入先出
class MyStack:
def __init__(self):
self.__list = list() def is_empty(self):
return self.__list == list() def size(self):
return len(self.__list) # 弹出栈顶元素(删除)
def pop(self):
return self.__list.pop() # 入栈
def push(self, item):
self.__list.append(item) # 返回栈顶元素
def peek(self):
if self.is_empty():
return None
else:
return self.__list[-1] def main():
mystack = MyStack()
mystack.push(1)
mystack.push(2)
mystack.push(3)
mystack.push(4)
mystack.push(5)
print(mystack.peek())
print(mystack.pop())
print(mystack.size())
print(mystack.is_empty()) if __name__ == '__main__':
main()

队列:

 # -*- coding: utf-8 -*-
# @author: Tele
# @Time : 2019/04/28 下午 3:16
# 队列,先进先出
# 设定list的头即为队列的头,list的尾即为队列的尾
class Queue:
def __init__(self):
self.__list = list() def is_empty(self):
return self.__list == list() def size(self):
return len(self.__list) # 入队
def enqueue(self, item):
self.__list.append(item) # 出队,从队列头部删除一个元素
def dequeue(self):
return self.__list.pop(0) def main():
queue = Queue()
queue.enqueue(1)
queue.enqueue(2)
queue.enqueue(3)
print(queue.dequeue())
print(queue.is_empty())
print(queue.size()) if __name__ == '__main__':
main()

双向队列:

 # -*- coding: utf-8 -*-
# @author: Tele
# @Time : 2019/04/28 下午 3:24
# 双端队列,类似两个栈的栈底合并在一起
# 设定list的头即为队列的头,list的尾即为队列的尾
class DoubleQueue:
def __init__(self):
self.__list = list() def is_empty(self):
return self.__list == list() def size(self):
return len(self.__list) # 在队头添加元素
def add_front(self, item):
self.__list.insert(0, item) # 在队尾添加元素
def add_rear(self, item):
self.__list.append(item) # 从队头删除元素
def remove_front(self):
return self.__list.pop(0) # 从队尾删除元素
def remove_rear(self):
return self.__list.pop() def main():
dq = DoubleQueue()
dq.add_front(1)
dq.add_front(2)
dq.add_rear(1000)
print(dq.size())
print(dq.is_empty())
print(dq.remove_front())
print(dq.remove_rear()) if __name__ == '__main__':
main()

队列的头尾选择与list的头尾对应关系应根据实际需要,如入队的频率高(在队尾添加元素),则队列的的尾就是list的尾,因为append的的复杂度为O(1),反之出队的频率高(从队头删除一个元素),则队列的头部为list的尾部,pop的复杂度为O(1)

python 使用顺序表实现栈和队列的更多相关文章

  1. python---用顺序表实现双端队列

    class Dqueue(object): """双端队列""" def __init__(self): self.__list = [] ...

  2. 行逻辑链接的顺序表实现稀疏矩阵的相乘(Java语言描述)

    行逻辑链接,带行链接信息.程序有空指针BUG,至今未解决.还是C/C++适合描述算法数据结构.以后复杂的算法还是改用C/C++吧. 有BUG的代码,总有一天会换成没有BUG的. package 行逻辑 ...

  3. python---用顺序表实现队列

    class Queue(object): """队列""" def __init__(self): self.__list = [] def ...

  4. Python数据结构 将列表作为栈和队列使用

    列表作为栈使用 Python列表方法使得列表作为堆栈非常容易,最后一个插入,最先取出(“后进先出”).要添加一个元素到堆栈的顶端,使用 append() .要从堆栈顶部取出一个元素,使用 pop()  ...

  5. Python列表操作——模拟实现栈和队列

    1.实现栈: stack=[] def pushit(): stack.append(raw_input('Enter New String:').strip()) def popit(): if l ...

  6. Python :用两个栈实现队列

    转自:http://blog.csdn.net/Lynette_bb/article/details/75092745 牛客网上的剑指 offer的在线编程: 题目描述 用两个栈来实现一个队列,完成队 ...

  7. Python 如何用列表实现栈和队列?

    1.栈结构,其实就是一个后进先出的一个线性表,只能在栈顶压入或弹出元素.用列表表示栈,则向栈中压入元素,可以用列表的append()方法来实现,弹出栈顶元素可以用列表的pop()方法实现. >& ...

  8. python数据结构与算法第六天【栈与队列】

    1.栈和队列的原理 栈:后进先出(LIFO),可以使用顺序表和链表实现 队列:先进先出(FIFO),可以使用顺序表和链表实现 2.栈的实现(使用顺序表实现) #!/usr/bin/env python ...

  9. Python 实现栈与队列

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

随机推荐

  1. (入门整理学习一)Asp.net core

    1.安装.net code SDK,vs Code;vs code c#插件可在软件扩展 (我网盘有)  vs2015上安装教程:http://www.cnblogs.com/wangrudong00 ...

  2. 下拉列表,点击选择实现跳转链接 onchange="window.location=..."

    <select onchange="window.location=this.value;"> <option value="a.html"& ...

  3. echarts同一页面四个图表切换的js数据交互

    需求:点击tab页,切换四个不同的图表,ajax向后台请求数据,展示在四个不同的图表中. 其余的就不多说,直接上js代码了 $(function() { $("#heart").o ...

  4. Scala基础知识

    1.scala的变量分为可变变量和不可变变量 不可变变量: val hello = "helloworld" 可变变量的定义方法 var str2 = "我是kw!&qu ...

  5. Linux下的lds链接脚本简介(四)

    十一. 表达式 lds中表达式的文法与C语言的表达式文法一致,表达式的值都是整型,如果ld的运行主机和生成文件的目标机都是32位,则表达式是32位数据,否则是64位数据. 以下是一些常用的表达式: _ ...

  6. Spring5源码深度解析(一)之理解Configuration注解

    代码地址:https://github.com/showkawa/spring-annotation/tree/master/src/main/java/com/brian 1.Spring体系结构 ...

  7. OC学习篇之---Foundation框架中的NSObject对象

    从这篇文章开始我们开始介绍Foundation框架. OC中的Foundation框架是系统提供了,他就相当于是系统的一套api,和Java中的一些系统jar很相似,又早起的一批人开发的,内部有很多现 ...

  8. Spring-Boot整合freemarker引入静态资源css、js等(转)

    一.概述 springboot 默认静态资源访问的路径为:/static 或 /public 或 /resources 或 /META-INF/resources 这样的地址都必须定义在src/mai ...

  9. Spring 定时器 No qualifying bean of type [org.springframework.scheduling.TaskScheduler] is defined(转)

    最近项目里面,用了spring的定时任务,一直以来,项目运行的不错.定时器也能正常使用.可是,今天启动项目测试的时候,盯着启动Log看了一阵子,突然间发现,启动的Log中居然有一个异常,虽然一闪而过, ...

  10. Mac安装brew及其用法

    Mac 安装 brew 及其用法: 安装brew: curl -LsSf http://github.com/mxcl/homebrew/tarball/master | sudo tar xvz - ...