`
iluoxuan
  • 浏览: 579968 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

2:Queue实现

 
阅读更多

1: 先进先出 队列的实现:

 

  first结点  负责出队

  last结点 负责入队

 

package com.algorithm.common;

import java.util.Iterator;
import java.util.NoSuchElementException;

/**
 * 先进先出队列
 * @author lijunqing
 * @param <Item>
 */
public class Queue<Item> implements Iterable<Item> {

    private int N;
    
    // 第一个节点
    private Node first;
    
    // 最后一个节点
    private Node last;

    private class Node {

        private Item item;

        private Node next;
    }

    public Queue() {
        N=0;
        first=null;
        last=first;
    }

    /**
     * 入队 新的Node就是last
     * @param item
     */
    public void enqueue(Item item) {
        Node oldLast=last;
        last=new Node();
        last.item=item;
        last.next=null;
        if(isEmpty()) { // 空的時候 只有只有一个几点 first = list
            first=last;
        } else {
            oldLast.next=last;
        }
        N++;
    }

    /**
     * 出队
     * @return
     */
    public Item dequeue() {
        if(isEmpty()) {
            throw new NoSuchElementException();
        }
        Item item=first.item;
        first=first.next;
        N--;
        return item;
    }

    public int size() {
        return N;
    }

    public boolean isEmpty() {
        if(first == null) {
            return true;
        }
        return false;
    }

    @Override
    public Iterator<Item> iterator() {
        return new ListIterator();
    }

    private class ListIterator implements Iterator<Item> {

        private Node current=first;

        @Override
        public boolean hasNext() {
            return current != null;
        }

        @Override
        public Item next() {
            Item item=current.item;
            current=current.next;
            return item;
        }

        @Override
        public void remove() {
            throw new UnsupportedOperationException();
        }

    }
    
    public static void main(String[] args){
        Queue<String> q = new Queue<String>();
        q.enqueue("123");
        q.enqueue("3445");
        q.enqueue("dddd");
        
        System.out.println(q.dequeue()+"  "+q.size());
        
        Iterator<String>  iterator = q.iterator();
        
        while(iterator.hasNext()){
            System.out.println(iterator.next());
        }
    }

}

 

结果:

123  2
3445
dddd

 

分享到:
评论

相关推荐

    队列类Queue的C++实现

    2. **push()**:在队尾添加一个元素,实现“入队”操作。 3. **pop()**:移除并返回队头的元素,实现“出队”操作。 4. **front()**:返回队头的元素,但不移除。 5. **back()**:返回队尾的元素,但不移除。这个...

    c++消息队列queue.rar

    在C++编程中,消息队列(Message Queue)是一种常用的数据结构,用于在并发环境或者不同线程之间实现异步通信。"c++消息队列queue.rar"可能包含了一个关于如何在C++中使用消息队列,特别是标准库中的`std::queue`...

    struct_queue.zip_C++ queue<struct>_queue<struct_queue的c++实现

    在给定的"struct_queue.zip"压缩包中,我们看到一个C++实现的`queue`,其内部元素是结构体(struct)。虽然这个实现可能提供了某些标准库版本不具备的功能,但需要注意,这种自定义实现可能并不总是优于标准库提供的`...

    心希盼 C++ STL Queue(队列)

    然而,用户也可以自定义底层容器,如`std::vector`或`std::list`,通过传递容器模板参数来实现: ```cpp std::queue, std::vector&lt;int&gt;&gt; myQueue; // 使用std::vector作为底层容器 std::queue, std::list&lt;int&gt;&gt; ...

    C语言实现的队列Queue

    2. 队列操作的实现: - 初始化队列(QueueInit):分配内存并设置初始状态。 - 入队(Enqueue):在队列后端添加新元素,如果队列已满则需要扩展队列大小。 - 出队(Dequeue):移除队列前端的元素,返回其值,如果...

    queue-link.zip_C++队列_打印 队列_队列

    在C++标准库中,`&lt;queue&gt;`头文件提供了`std::queue`模板类,用于实现泛型队列。默认情况下,它基于`std::deque`(双端队列)作为底层容器。我们可以自定义容器,如`std::vector`或`std::list`。 ```cpp #include...

    C++队列操作.docx

    `std::queue`通常基于其他两种容器,如`std::deque`(双端队列)或`std::list`,来实现其内部操作。 以下是使用`std::queue`进行队列操作的一些关键知识点: 1. **构造与初始化**: `std::queue`可以接受一个可选...

    C++数据结构实现之Queue.zip

    2. **C++实现队列的两种方式** - **数组实现**:使用数组存储队列元素,通过两个指针分别追踪队头和队尾的位置。当队列满或空时,需要进行动态扩容或缩容操作。 - **链表实现**:使用节点链接元素,每个节点包含...

    DataStruct_Queue

    以下是一个基于数组的简单队列实现: ```cpp template class Queue { private: T* data; int front, rear, capacity; public: Queue(int size) : data(new T[size]), front(0), rear(-1), capacity(size) {} ...

    vc++中队列deque和queue的使用

    2. 引入`#include &lt;queue&gt;`和`#include &lt;deque&gt;`头文件。 3. 使用`queue`或`deque`声明和初始化队列对象。 4. 实现`push`、`pop`等操作,并添加注释以便理解。 5. 编译并运行程序,观察队列操作的效果。 通过这种...

    Queue实现类1

    2. OpenJDK 源码,查看 ArrayDeque 和 PriorityQueue 的具体实现细节。 3. 书籍《Java 核心技术卷 I》和《算法导论》,获取关于数据结构和算法的基础知识。 4. 在线教程和博客,如 Stack Overflow、LeetCode 讨论区...

    tp5.1消息队列 think-queue

    2. **配置**:在项目的config目录下创建queue.php配置文件,设置队列驱动、连接信息、任务超时时间等相关参数。 3. **注册服务提供者**:在app/Provider.php中注册QueueServiceProvider,确保框架能正确加载队列...

    2Queue1Stack.rar_Two Queues

    本项目“2Queue1Stack.rar”探讨了一种创新的实现方式,即使用两个队列(queue)来模拟一个栈(stack)的功能。这种方法在某些场景下可能比直接使用栈更具优势,例如当系统资源限制或者需要优化特定操作时。 栈是一...

    队列,数据结构,c++实现,自创

    `std::queue`是C++标准库的一部分,它提供了对队列操作的基本接口,但内部实现可以是不同的容器,如`std::deque`或`std::list`。然而,为了更好地理解队列的工作原理,我们可以选择自创一个队列。 自创队列时,我们...

    C++代码Queue队列

    C++作为一种强大的编程语言,提供了多种方式来实现队列,包括标准模板库(STL)中的`queue`容器以及自定义的数据结构。本篇文章将深入探讨C++中队列的实现及其应用。 首先,我们要了解C++标准库中的`&lt;queue&gt;`头文件...

    C# MessageQueue示例

    2. **C# MessageQueue类** - **System.Messaging命名空间**:在C#中,`System.Messaging`命名空间包含了处理消息队列所需的所有类和接口,如`MessageQueue`、`Message`等。 - **MessageQueue类**:这是核心类,...

    Amp-yii2-queue.zip

    在"Amp-yii2-queue.zip"的压缩包中,包含了一个名为"yii2-queue-master"的目录,这很可能是一个YII 2.0的队列管理组件。队列是Web应用中常用的一种设计模式,用于将耗时的任务放到后台处理,避免阻塞主线程。结合Amp...

    使用dev_queue_xmit、dev_hard_start_xmit的方法实现数据包的发送.docx )

    ### 使用`dev_queue_xmit`与`dev_hard_start_xmit`方法实现数据包发送 在Linux内核开发中,网络栈的功能实现极为关键。本文旨在深入解析如何利用`dev_queue_xmit`和`dev_hard_start_xmit`这两个核心函数来实现...

    c++11 实现的阻塞队列

    2. 阻塞机制:使用 std::condition_variable 来实现阻塞机制,当队列为空时,消费者线程将被阻塞,直到生产者线程将数据加入队列中。 在 C++11 中,我们可以使用 std::condition_variable::wait 和 std::condition_...

Global site tag (gtag.js) - Google Analytics