zoukankan      html  css  js  c++  java
  • 算法-第四版-练习1.3.32解答

    问题

    Steque。一个以栈为目标的队列(或称steque),是一种支持push、pop和enqueue操作的数据类型。为这种抽象数据类型定义一份API并给出一份基于链表的实现。

    解决思路

    /**
     * -----------------------------------------------------
     * public class Steque<Item> implements Iterable<Item>
     * -----------------------------------------------------
     *    boolean isEmpty()                
     *       void push(Item e)            添加一个元素到头部
     *       Item pop()                   从头部删除一个元素
     *       void enqueue(Item e)         添加一个元素到尾部
     * -----------------------------------------------------
     */


    代码

    /**
     * Description : 
     * Author      : mn@furzoom.com
     * Date        : Oct 26, 2016 1:47:35 PM
     * Copyright (c) 2013-2016, http://furzoom.com All Rights Reserved.
     */
    /**
     * -----------------------------------------------------
     * public class Steque<Item> implements Iterable<Item>
     * -----------------------------------------------------
     *    boolean isEmpty()                
     *       void push(Item e)             添加一个元素到头部
     *       Item pop()                    从头部删除一个元素
     *       void enqueue(Item e)          添加一个元素到尾部
     * -----------------------------------------------------
     */
    package com.furzoom.lab.algs.ch103;
    
    import java.util.Iterator;
    
    /**
     * ClassName    : Steque <br>
     * Function     : TODO ADD FUNCTION. <br>
     * date         : Oct 26, 2016 1:47:35 PM <br>
     * 
     * @version 
     */
    public class Steque<Item> implements Iterable<Item>
    {
        private Node first;
        private Node last;
        
        private class Node
        {
            public Item item;
            public Node next;
        }
        
        public boolean isEmpty()
        {
            return first == null;
        }
        
        public void enqueue(Item e)
        {
            Node node = new Node();
            node.item = e;
            node.next = null;
            if (isEmpty())
            {
                first = node;
                last = node;
            }
            else
            {
                last.next = node;
                last = node;
            }
        }
        
        public void push(Item e)
        {
            Node node = new Node();
            node.item = e;
            if (isEmpty())
            {
                first = node;
                last = node;
                node.next = null;
            }
            else
            {
                node.next = first;
                first = node;
            }
        }
        
        public Item pop()
        {
            if (isEmpty())
            {
                return null;
            }
            else
            {
                Item e = first.item;
                first = first.next;
                return e;
            }
        }
        
        @Override
        public Iterator<Item> iterator()
        {
            return new Iter();
        }
        
        private class Iter implements Iterator<Item>
        {
            private Node current = first;
            @Override
            public boolean hasNext()
            {
                return current != null;
            }
            
            @Override
            public Item next()
            {
                Item e = current.item;
                current = current.next;
                return e;
            }
        }
    }
    

    测试代码:

    /**
     * Description : 
     * Author      : mn@furzoom.com
     * Date        : Oct 26, 2016 2:04:23 PM
     * Copyright (c) 2013-2016, http://furzoom.com All Rights Reserved.
     */
    package com.furzoom.lab.algs.ch103;
    
    import java.util.Iterator;
    
    /**
     * ClassName    : E10332 <br>
     * Function     : TODO ADD FUNCTION. <br>
     * date         : Oct 26, 2016 2:04:23 PM <br>
     * 
     * @version 
     */
    public class E10332
    {
        public static void main(String[] args)
        {
            Steque<String> s = new Steque<String>();
            s.enqueue("d");
            s.enqueue("e");
            s.enqueue("f");
            s.push("c");
            s.push("b");
            s.push("a");
            System.out.println("Steque is:");
            Iterator<String> it = s.iterator();
            while (it.hasNext())
            {
                System.out.println(it.next());
            }
            
            System.out.println("pop up:");
            while (!s.isEmpty())
            {
                System.out.println(s.pop());
            }
        }
    }
    

    结果:

    Steque is:
    a
    b
    c
    d
    e
    f
    pop up:
    a
    b
    c
    d
    e
    f
    

    算法-第四版-1.3 背包、队列和栈-习题索引汇总

    算法-第四版习题索引汇总


  • 相关阅读:
    队列加分项
    队列课下作业
    20162306 2017-2018-1 《程序设计与数据结构》第7周学习总结
    20162306 2017-2018-1 《程序设计与数据结构》第5周学习总结
    20162306陈是奇 第一次实验报告
    20162306 2017-2018-1 《程序设计与数据结构》第3周学习总结
    20162306 陈是奇 2017-2018-1 《程序设计与数据结构》第1周学习总结
    数据库实验补充
    2017-2018-1 20162304 实验二 树
    队列加分项
  • 原文地址:https://www.cnblogs.com/furzoom/p/7710170.html
Copyright © 2011-2022 走看看