栈:

 # -*- 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. 1.JPA概要

    转自:https://www.cnblogs.com/holbrook/archive/2012/12/30/2839842.html JPA定义了Java ORM及实体操作API的标准.本文摘录了J ...

  2. ASP.NET MVC案例教程(基于ASP.NET MVC beta)——第六篇:拦截器

    摘要      本文将对“MVC公告发布系统”的发布公告功能添加日志功能和异常处理功能,借此来讨论ASP.NET MVC中拦截器的使用方法. 一个小难题      我们继续完善“MVC公告发布系统”, ...

  3. Oracle学习总结(10)——45 个非常有用的 Oracle 查询语句

    ******************************  日期/时间 相关查询 *****************************       -- 1.获取当前月份的第一天  sele ...

  4. 自己定义progressdialog载入动画,这里还有旋转的载入条,美团,多个图片动画

    自己定义progressdialog载入动画,这里还有旋转的载入条,美团,多个图片动画 下载Demo:http://download.csdn.net/detail/menglele1314/8775 ...

  5. iOS8: 企业开发的终结?

    iOS 8 的公布(如今是 iOS8.1),并非对全部人来说都是值得高兴的事情. 对那些使用企业部署(不经过商店公布)的 app 开发人员来说,又被苹果坑到了. 由于 iOS 8 的一个Bug.导致企 ...

  6. 从数据表中随机抽取n条数据有哪几种方法(join实现可以先查数据然后再拼接)

    从数据表中随机抽取n条数据有哪几种方法(join实现可以先查数据然后再拼接) 一.总结 一句话总结:最好的是这个:"SELECT * FROM table WHERE id >= (( ...

  7. Android SlideAndDragListView,一个可排序可滑动item的ListView

    SlideAndDragListView简介 SlideAndDragListView,可排序.可滑动item显示”菜单”的ListView. SlideAndDragListView(SDLV)继承 ...

  8. python opencv3 —— 改变颜色空间(color space)

    OpenCV: Changing Colorspaces 1. 查看 opencv 支持的颜色空间转换 opencv 中色彩空间转换由一些定义的全局的宏给出,使用如下的代码,将它们调出: >&g ...

  9. java学习笔记之基础语法(一)

    1.java语言基础由关键字.标识符.注释.常量和变量.运算符.语句.函数和数组等组成. 2.1关键字 定义:被java语言赋予了特殊含义的单词 特点:关键字中所有的字母都是小写. 2.2用于定义数据 ...

  10. linux 查询制定目录的制定内容

    //.点为查找当前目录 下 的 所有 *.php 文件里 有 hello 的文件 find . -name "*.php" | xargs grep "hello&quo ...