python数据结构与算法第六天【栈与队列】
1.栈和队列的原理
栈:后进先出(LIFO),可以使用顺序表和链表实现
队列:先进先出(FIFO),可以使用顺序表和链表实现
2.栈的实现(使用顺序表实现)
#!/usr/bin/env python
# _*_ coding:UTF-8 _*_
class Stack(object):
    '''使用顺序表实现栈'''
    def __init__(self):
        '''构造方法,将list设置为私有,这样外部不能直接操作list'''
        self.__list = []
    def push(self, item):
        '''push'''
        self.__list.append(item)
    def pop(self):
        '''pop'''
        return self.__list.pop()
    def peek(self):
        '''peek'''
        return self.__list[-1]
    def is_empty(self):
        '''is_empty'''
        return self.__list == []
    def size(self):
        '''size'''
        return len(self.__list)
if __name__ == "__main__":
    s = Stack()
    s.push(1)
    s.push(2)
    s.push(3)
    s.push(4)
    print s.pop()
    print s.pop()
    print s.pop()
    print s.pop()
结果:
/Users/liudaoqiang/PycharmProjects/numpy/venv/bin/python /Users/liudaoqiang/Project/python_project/bat_day2/stack_test.py 4 3 2 1 Process finished with exit code 0
注意:
(1)必须有Stack()方法
(2)必须有push()方法
(3)必须有pop()方法
(4)必须有peek(),返回栈顶元素
(5)必须有is_empty(),判断栈是否为空
(6)必须有size(),返回大小
3.队列的实现(使用顺序表实现)
#!/usr/bin/env python
#! _*_ coding:UTF-8  _*_
class Queue(object):
    '''使用顺序表实现队列'''
    def __init__(self):
        '''构造方法,将list设置为私有,这样外部不能直接操作list'''
        self.__list = []
    def enqueue(self, item):
        self.__list.append(item)
    def dequeue(self):
        return self.__list.pop(0)
    def is_empty(self):
        '''is_empty'''
        return self.__list == []
    def size(self):
        '''size'''
        return len(self.__list)
if __name__ == "__main__":
    s = Queue()
    s.enqueue(1)
    s.enqueue(2)
    s.enqueue(3)
    s.enqueue(4)
    print s.dequeue()
    print s.dequeue()
    print s.dequeue()
    print s.dequeue()
结果:
/Users/liudaoqiang/PycharmProjects/numpy/venv/bin/python /Users/liudaoqiang/Project/python_project/bat_day2/queue_test.py 1 2 3 4 Process finished with exit code 0
4.双端队列的实现(使用顺序表实现)
#!/usr/bin/env python
#! _*_ coding:UTF-8 _*_
class Deque(object):
    def __init__(self):
        self.__list = []
    def push_front(self, item):
        self.__list.insert(0, item)
    def push_rear(self, item):
        self.__list.append(item)
    def pop_front(self):
        return self.__list.pop(0)
    def pop_rear(self):
        return self.__list.pop()
    def is_empty(self):
        return self.__list == []
    def size(self):
        return len(self.__list)
python数据结构与算法第六天【栈与队列】的更多相关文章
- 用JS描述的数据结构及算法表示——栈和队列(基础版)
		
前言:找了上课时数据结构的教程来看,但是用的语言是c++,所以具体实现在网上搜大神的博客来看,我看到的大神们的博客都写得特别好,不止讲了最基本的思想和算法实现,更多的是侧重于实例运用,一边看一边在心里 ...
 - Java数据结构和算法之栈与队列
		
二.栈与队列 1.栈的定义 栈(Stack)是限制仅在表的一端进行插入和删除运算的线性表. (1)通常称插入.删除的这一端为栈顶(Top),另一端称为栈底(Bottom). (2)当表中没有元素时称为 ...
 - Python数据结构 将列表作为栈和队列使用
		
列表作为栈使用 Python列表方法使得列表作为堆栈非常容易,最后一个插入,最先取出(“后进先出”).要添加一个元素到堆栈的顶端,使用 append() .要从堆栈顶部取出一个元素,使用 pop() ...
 - 数据结构和算法之栈和队列三:自定义一个栈包含min函数
		
我们都知道一个栈的特点是后进先出,如果我们要实现在O(1)的时间内找到一个栈里面的最小值,我们应该怎么解决?如果我们采用遍历获取的思路那必然所需要的时间是O(N)与我们所需要的要求明显不符合,这时候我 ...
 - python数据结构与算法
		
最近忙着准备各种笔试的东西,主要看什么数据结构啊,算法啦,balahbalah啊,以前一直就没看过这些,就挑了本简单的<啊哈算法>入门,不过里面的数据结构和算法都是用C语言写的,而自己对p ...
 - Python数据结构与算法之图的广度优先与深度优先搜索算法示例
		
本文实例讲述了Python数据结构与算法之图的广度优先与深度优先搜索算法.分享给大家供大家参考,具体如下: 根据维基百科的伪代码实现: 广度优先BFS: 使用队列,集合 标记初始结点已被发现,放入队列 ...
 - Python数据结构与算法--List和Dictionaries
		
Lists 当实现 list 的数据结构的时候Python 的设计者有很多的选择. 每一个选择都有可能影响着 list 操作执行的快慢. 当然他们也试图优化一些不常见的操作. 但是当权衡的时候,它们还 ...
 - Python数据结构与算法--算法分析
		
在计算机科学中,算法分析(Analysis of algorithm)是分析执行一个给定算法需要消耗的计算资源数量(例如计算时间,存储器使用等)的过程.算法的效率或复杂度在理论上表示为一个函数.其定义 ...
 - java实现 数据结构:链表、 栈、 队列、优先级队列、哈希表
		
java实现 数据结构:链表. 栈. 队列.优先级队列.哈希表 数据结构javavector工作importlist 最近在准备找工作的事情,就复习了一下java.翻了一下书和网上的教材,发现虽然 ...
 
随机推荐
- Spring Cloud Config(配置中心)
			
每天学习一点点 编程PDF电子书.视频教程免费下载:http://www.shitanlife.com/code 一.简介 Spring Cloud Config为分布式系统中的外部配置提供服务器和客 ...
 - 【转】具透 | 你可能不知道,iOS 10 有一个中国「特供」的联网权限功能
			
9 月底,苹果正式在北京成立了苹果中国研发中心.近几年,我们也在每年更新的 iOS 系统中不断看到,苹果对中国市场的关照.从早前的九宫格输入法,到最近的骚扰电话拦截,都照顾了国内用户的需求. 在 iO ...
 - OPPO Developers Conference(2018.12.26)
			
时间:2018.12.26地点:北京国家会议中心
 - 十分钟学会Java8:lambda表达式和Stream API
			
Java8 的新特性:Lambda表达式.强大的 Stream API.全新时间日期 API.ConcurrentHashMap.MetaSpace.总得来说,Java8 的新特性使 Java 的运行 ...
 - 读写分离子系统 - C# SQL分发子系统(目前只支持ADO.NET)
			
这次介绍的这个框架只适用于中小项目,并且各个读写数据库结构是一致的情况,还要并且是写入数据库只有1台情况. 我们来看看这个子系统适用的场景: 我们来看这个子系统的配置文件: <?xml vers ...
 - 深入浅出经典面试题:从浏览器中输入URL到页面加载发生了什么 - Part 3
			
备注: 因为文章太长,所以将它分为三部分,本文是第三部分. 第一部分:深入浅出经典面试题:从浏览器中输入URL到页面加载发生了什么 - Part 1 第二部分:深入浅出经典面试题:从浏览器中输入URL ...
 - 四、Input框改placeholder中字体的颜色
			
Input框改placeholder中字体的颜色 input::-webkit-input-placeholder { color: #ccc; font-size: 12px; }
 - 01-JavaScript介绍
			
JavaScript价绍 1.引言 Web前端有三层: HTML:从语义的角度,描述页面结构 CSS:从审美的角度,描述样式(美化页面) JavaScript:从交互的角度,描述行为(提升用户体验) ...
 - R语言绘制QQ图
			
无论是直方图还是经验分布图,要从比较上鉴别样本是否处近似于某种类型的分布是困难的 QQ图可以帮我们鉴别样本的分布是否近似于某种类型的分布 R语言,代码如下: > qqnorm(w);qqline ...
 - elasticsearch判断索引是否存在
			
一.判断索引是否存在 指定索引名,判断指定的索引是否存在集群中 /** * 判断指定的索引名是否存在 * @param indexName 索引名 * @return 存在:true; 不存在:fal ...