python 使用顺序表实现栈和队列
栈:
# -*- 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 使用顺序表实现栈和队列的更多相关文章
- python---用顺序表实现双端队列
class Dqueue(object): """双端队列""" def __init__(self): self.__list = [] ...
- 行逻辑链接的顺序表实现稀疏矩阵的相乘(Java语言描述)
行逻辑链接,带行链接信息.程序有空指针BUG,至今未解决.还是C/C++适合描述算法数据结构.以后复杂的算法还是改用C/C++吧. 有BUG的代码,总有一天会换成没有BUG的. package 行逻辑 ...
- python---用顺序表实现队列
class Queue(object): """队列""" def __init__(self): self.__list = [] def ...
- Python数据结构 将列表作为栈和队列使用
列表作为栈使用 Python列表方法使得列表作为堆栈非常容易,最后一个插入,最先取出(“后进先出”).要添加一个元素到堆栈的顶端,使用 append() .要从堆栈顶部取出一个元素,使用 pop() ...
- Python列表操作——模拟实现栈和队列
1.实现栈: stack=[] def pushit(): stack.append(raw_input('Enter New String:').strip()) def popit(): if l ...
- Python :用两个栈实现队列
转自:http://blog.csdn.net/Lynette_bb/article/details/75092745 牛客网上的剑指 offer的在线编程: 题目描述 用两个栈来实现一个队列,完成队 ...
- Python 如何用列表实现栈和队列?
1.栈结构,其实就是一个后进先出的一个线性表,只能在栈顶压入或弹出元素.用列表表示栈,则向栈中压入元素,可以用列表的append()方法来实现,弹出栈顶元素可以用列表的pop()方法实现. >& ...
- python数据结构与算法第六天【栈与队列】
1.栈和队列的原理 栈:后进先出(LIFO),可以使用顺序表和链表实现 队列:先进先出(FIFO),可以使用顺序表和链表实现 2.栈的实现(使用顺序表实现) #!/usr/bin/env python ...
- Python 实现栈与队列
#基于Python2.7 #基于顺序表实现 #发现用Python写题时,没有像写C++时方便的STL可用,不过查阅资料之后发现用class实现也很简洁,不过效率应该不是很高 Python实现栈并使用: ...
随机推荐
- 26.SpringBoot事务注解详解
转自:https://www.cnblogs.com/kesimin/p/9546225.html @Transactional spring 事务注解 1.简单开启事务管理 @EnableTrans ...
- 16、cgminer学习之:popen函数和system函数详解(执行系统命令)
1.popen函数我们先用man指令查一下popen函数: 函数说明: (1)popen()会调用fork()产生子进程,然后从子进程中调用/bin/sh -c来执行参数command的指令. (2) ...
- 网络博客 VC\图案像处理
http://blog.csdn.net/lvwx369/article/category/1185452 http://blog.csdn.net/lyy289065406/article/deta ...
- java线程——三种创建线程的方式
前言 线程,英文Thread.在java中,创建线程的方式有三种: 1.Thread 2.Runnable 3.Callable 在详细介绍下这几种方式之前,我们先来看下Thread类和Runnabl ...
- ubuntu下安装phpredis的模块扩展
1.前提是先安装好redis,然后再安装phpredis. .. 2.先下载phpredis-master.tar.gz安装包... 详细详情例如以下: <span style="co ...
- cocos2dx--vs2012+lua开发环境搭建
cocos2dx版本号:cocos2dx2.2.3 lua插件:babelua 1.5.3 下载地址:http://pan.baidu.com/s/1i3mPD8h 第一步:先关闭vs,双击下载下来 ...
- 《TCP/IP具体解释卷2:实现》笔记--协议控制块
协议层使用协议控制块(PCB)存放各UDP和TCP插口所要求的多个信息片.Internet协议维护Internet协议控制块 (internet protocol control block)和TCP ...
- [Angular] Change component default template (ng-content, ng-template, ngTemplateOutlet, TemplateRef)
Here is the defulat tab header template: <ng-template #defaultTabHeader let-tabs="tabsX" ...
- 解决Eclipse中的卡死现象
解决Eclipse中的卡死现象 取消验证 windows–>perferences–>validation 把 除了manual 下面的全部点掉,build下只留 classpath de ...
- php 根据给定的年份和月份获取该年份该月份的起始和结束时间
function getShiJianChuo($nian=0,$yue=0){ if(empty($nian) || empty($yue)){ $now = time(); $nian = dat ...