类练习题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]

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

搜索树和链表实现的堆

目的: 1、创建最大堆类。最大堆的存储结构使用链表。 2、提供操作:堆的插入、堆的删除。堆的初始化。Huffman 树的构造。二叉搜索树的构造。 3、接收键盘录入的一系列整数,输出其对应的最大堆...
  • java_xiaoer
  • java_xiaoer
  • 2016年02月17日 15:27
  • 592

java中Date类的练习

package demo; import java.text.DateFormat; import java.text.ParseException; import java.text.Si...
  • u013439440
  • u013439440
  • 2014年02月16日 16:04
  • 1243

堆栈和队列的实现

要求:写Stack.java,实现堆栈功能,使用int数组保存数据 特点:先进后处 后进先出 Queue.java,实现队列功能,使用int数组保存数据 特点:先进先出 后进后出 使用Test....
  • suwu150
  • suwu150
  • 2016年08月09日 23:09
  • 1071

栈和队列 习题

第3章栈和队列 一、    单选题 1、栈的操作原则是() A. 顺序进出     B。后进后出   C。后进先出   D。先进先出 2、若进栈序列为a,b,c,则通过入出栈操作可能得到的a,...
  • u010900851
  • u010900851
  • 2013年06月07日 20:00
  • 1984

PHP数据结构之五:栈的PHP的实现和栈的基本操作

from:http://www.phpboy.net/web/php/57.html 栈和队列是两种应用非常广泛的数据结构,它们都来自线性表数据结构,都是“操作受限”的线性表。 栈 栈...
  • qdujunjie
  • qdujunjie
  • 2015年02月04日 15:44
  • 3311

堆、列表、队列和栈

堆(Heap): 首先来讲一讲堆的结构,以下图为例。从根结点开始,每个结点可以有左、右两个结点,元素优先将每一层按从左到右的方式填满,即父结点最多有两个子结点,有右子结点就一定会有左子结点,同一层的...
  • Ethan_Apple
  • Ethan_Apple
  • 2017年04月11日 17:48
  • 1190

利用堆栈和队列实现计算器

我们为了简化代码量所以使用stack和queue两个stl库中所提供的函数,所有的函数实现全部和前面所提供的一致 map是一个函数映射库,普通的数组可以看成是int型到int,char等其他类型的映...
  • yyb0802
  • yyb0802
  • 2017年10月30日 16:53
  • 118

涉及String类笔试题练习

Java面试笔试题中String类常见的题目: 1、自己设计一个trim()方法: public String myTrim(String string) { int start...
  • u012815527
  • u012815527
  • 2015年05月12日 17:54
  • 212

黑马程序员——Date.Calendar类的介绍及练习

----------------------    android培训    java培训   期待与您交流!    ----------------------                ...
  • wjw_java
  • wjw_java
  • 2012年09月02日 20:58
  • 581

java接口小练习

1、编写2个接口:InterfaceA和InterfaceB;在接口InterfaceA中有个方法voidprintCapitalLetter();在接口InterfaceB中有个方法void p...
  • pgx115
  • pgx115
  • 2017年07月16日 14:11
  • 133
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:类练习题2:堆栈和队列类
举报原因:
原因补充:

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