类练习题2:堆栈和队列类

原创 2015年11月20日 16:41:27

该练习题来自(Python 核心编程 第二版)第13章 练习题13-10, 题目如下:


13-10.堆栈和队列。编写一个类,定义一个能够同时具有堆栈(FIFO)和队列(LIFO)操作行为的数据结构。这个类和Perl语言中数组相像。需要实现四个方法:

shift()  返回并删除列表中的第一个元素。

unshift()  在列表的头部"压入"一个新元素。

push()  在列表的尾部加上一个新元素。

pop()  返回并删除列表中的最后一个元素。


下面是我写的该例题代码,供以后参考:

#!/usr/bin/env python
 
class StackQueue(object):
    '''Class StackQueue().
 
    The class supports two data structures
    for both stack and queue.
    '''
 
    def __init__(self):
        self.__list = [] 
     
    def __str__(self):
        return str(self.__list)
 
    __repr__ = __str__
 
    def shift(self):
        '''
        Delete a element from the front of a list.
        '''
        try:
            print self.__list[0]
        except IndexError:
            print "can't delete a element from a empty list."
        else:
            self.__list = self.__list[1:]
 
    def unshift(self, element):
        '''
        Press a new element into the head of the list.
        '''
        self.__list.insert(0, element)
 
    def push(self, element):
        '''
        Add a new element to the end of the list.
        '''
        self.__list.append(element)
 
    def pop(self):
        '''
        Return and remove the last element in the list.
        '''
        if hasattr(list, 'pop'):
            print self.__list.pop()
        else:
            try:
                print self.__list[-1]
            except IndexError:
                print "can't delete a element from a empty list."
            else:
                self.__list = self.__list[:-1]
 
def _test():
    a = StackQueue()
    print a
    a.push(2)
    a.unshift(1)
    a.push(3)
    print a
    a.shift()
    print a
    a.pop()
    print a
 
if __name__ == "__main__":
    _test()


该脚本可以作为模块导入使用,也可以直接运行,直接运行结果如下:

[]

[1, 2, 3]

1

[2, 3]

3

[2]

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

面试题集-堆栈和队列

如何准备: Whether you are asked to implement a simple stack / queue, or you are asked to implementa mod...

C++数组实现队列、堆栈、模板类

前面发现老师要求我们写一个堆栈、队列,但是我发现每一次都要修改数据类型,而且我在网上也没找到模板类,所以我就自己看了看模板类的知识,自己用数组写了一个,貌似使用起来没有什么问题。 1. 循环队列 te...

第2章第2节练习题2 使用栈模拟队列操作

利用两个栈S1,S2来模拟一个队列,实现队列的入队,出队,判空操作

HDU1874:畅通工程续(最短路Dijkstra(n^2+nlogn)+Floyd+SPFA(堆栈+队列))

Problem Description 某省自从实行了很多年的畅通工程计划后,终于修建了很多路。不过路多了也不好,每次要从一个城镇到另一个城镇时,都有许多种道路方案可以选择,而某些方案要比另一些方案行...

java学习之路 之 高级类特性2-关键字static、final、动态语句块结合的练习题

class Employee { static { // 随着的类的加载而执行, 且执行一次, 由JVM自动执行, 相当于类构造器 System.out.println("static{}....

java学习之路 之 高级类特性1-多态、重写-练习题2

public class Computer { private double cpu; private int memory; private int disk; private doub...

java学习之路 之 高级类特性2-接口(interface)-练习题

// 接口通常用形容词来描述 , 用以描述一种能力.public interface Flyer { // 接口 : 是对事物行为的抽象定义, 接口中只允许抽象方法,和全局常量 public s...

线性表、堆栈、队列

  • 2017年04月08日 22:01
  • 1.38MB
  • 下载

【win32程序控制台】练习题:堆栈数据增删过程的演示(来自c++primer plus p328~330)

/ * 程序的版权和版本声明部分 * Copyright (c) 2012, 华南师范大学软件工程专业 * All rights reserved. * 文件名称:堆栈数据增删过程...
  • Hookc
  • Hookc
  • 2012年04月10日 13:12
  • 780
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:类练习题2:堆栈和队列类
举报原因:
原因补充:

(最多只允许输入30个字)