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)

最新文章

  1. epoll
  2. 解决Bootstrap模态框切换时页面抖动 or页面滚动条
  3. PHP学习笔记:MySQL数据库的操纵
  4. R语言的向量化编程思维
  5. Vijos P1062 迎春舞会之交谊舞
  6. osip及eXosip的编译方法
  7. JAVA之GUI编程ACTION事件
  8. Cocos2d-x 3.0final 终结者系列教程04-引擎架构分析
  9. Python爬虫知识点一
  10. [bzoj4245][ONTAK2015]OR-XOR
  11. 时序数据库连载系列:指标届的独角兽Prometheus
  12. spark on yarn 内存分配
  13. springboot 数据验证
  14. MySQL 主主配置
  15. Eclipse+maven+scala+spark环境搭建
  16. Java -- JDBC 学习--批量处理
  17. 大数据学习路线分享-Hbase shell的基本操作完整流程
  18. python 删除一个目录下的所有文件
  19. Linux发行版,分类,CentOS下载
  20. 9、Dubbo-配置(4)

热门文章

  1. 2、原生jdbc的dao模式
  2. Spring Security(二):一、Preface(前言)
  3. org.yaml.snakeyaml.error.YAMLException: java.nio.charset.MalformedInputException: Input length = 1
  4. Mysql5.5安装
  5. numpy.loadtxt()
  6. bootstrap 失效的原因
  7. SQLite 实现删除表中前一天的数据
  8. Linux—CentOS7下python开发环境配置
  9. c++入门之字符相关入门
  10. 史上最全 原生javascript的知识总结,适合新手及查资料用!