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
相关推荐
2. **push()**:在队尾添加一个元素,实现“入队”操作。 3. **pop()**:移除并返回队头的元素,实现“出队”操作。 4. **front()**:返回队头的元素,但不移除。 5. **back()**:返回队尾的元素,但不移除。这个...
在C++编程中,消息队列(Message Queue)是一种常用的数据结构,用于在并发环境或者不同线程之间实现异步通信。"c++消息队列queue.rar"可能包含了一个关于如何在C++中使用消息队列,特别是标准库中的`std::queue`...
在给定的"struct_queue.zip"压缩包中,我们看到一个C++实现的`queue`,其内部元素是结构体(struct)。虽然这个实现可能提供了某些标准库版本不具备的功能,但需要注意,这种自定义实现可能并不总是优于标准库提供的`...
然而,用户也可以自定义底层容器,如`std::vector`或`std::list`,通过传递容器模板参数来实现: ```cpp std::queue, std::vector<int>> myQueue; // 使用std::vector作为底层容器 std::queue, std::list<int>> ...
2. 队列操作的实现: - 初始化队列(QueueInit):分配内存并设置初始状态。 - 入队(Enqueue):在队列后端添加新元素,如果队列已满则需要扩展队列大小。 - 出队(Dequeue):移除队列前端的元素,返回其值,如果...
在C++标准库中,`<queue>`头文件提供了`std::queue`模板类,用于实现泛型队列。默认情况下,它基于`std::deque`(双端队列)作为底层容器。我们可以自定义容器,如`std::vector`或`std::list`。 ```cpp #include...
`std::queue`通常基于其他两种容器,如`std::deque`(双端队列)或`std::list`,来实现其内部操作。 以下是使用`std::queue`进行队列操作的一些关键知识点: 1. **构造与初始化**: `std::queue`可以接受一个可选...
2. **C++实现队列的两种方式** - **数组实现**:使用数组存储队列元素,通过两个指针分别追踪队头和队尾的位置。当队列满或空时,需要进行动态扩容或缩容操作。 - **链表实现**:使用节点链接元素,每个节点包含...
以下是一个基于数组的简单队列实现: ```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) {} ...
2. 引入`#include <queue>`和`#include <deque>`头文件。 3. 使用`queue`或`deque`声明和初始化队列对象。 4. 实现`push`、`pop`等操作,并添加注释以便理解。 5. 编译并运行程序,观察队列操作的效果。 通过这种...
2. OpenJDK 源码,查看 ArrayDeque 和 PriorityQueue 的具体实现细节。 3. 书籍《Java 核心技术卷 I》和《算法导论》,获取关于数据结构和算法的基础知识。 4. 在线教程和博客,如 Stack Overflow、LeetCode 讨论区...
2. **配置**:在项目的config目录下创建queue.php配置文件,设置队列驱动、连接信息、任务超时时间等相关参数。 3. **注册服务提供者**:在app/Provider.php中注册QueueServiceProvider,确保框架能正确加载队列...
本项目“2Queue1Stack.rar”探讨了一种创新的实现方式,即使用两个队列(queue)来模拟一个栈(stack)的功能。这种方法在某些场景下可能比直接使用栈更具优势,例如当系统资源限制或者需要优化特定操作时。 栈是一...
`std::queue`是C++标准库的一部分,它提供了对队列操作的基本接口,但内部实现可以是不同的容器,如`std::deque`或`std::list`。然而,为了更好地理解队列的工作原理,我们可以选择自创一个队列。 自创队列时,我们...
C++作为一种强大的编程语言,提供了多种方式来实现队列,包括标准模板库(STL)中的`queue`容器以及自定义的数据结构。本篇文章将深入探讨C++中队列的实现及其应用。 首先,我们要了解C++标准库中的`<queue>`头文件...
2. **C# MessageQueue类** - **System.Messaging命名空间**:在C#中,`System.Messaging`命名空间包含了处理消息队列所需的所有类和接口,如`MessageQueue`、`Message`等。 - **MessageQueue类**:这是核心类,...
在"Amp-yii2-queue.zip"的压缩包中,包含了一个名为"yii2-queue-master"的目录,这很可能是一个YII 2.0的队列管理组件。队列是Web应用中常用的一种设计模式,用于将耗时的任务放到后台处理,避免阻塞主线程。结合Amp...
### 使用`dev_queue_xmit`与`dev_hard_start_xmit`方法实现数据包发送 在Linux内核开发中,网络栈的功能实现极为关键。本文旨在深入解析如何利用`dev_queue_xmit`和`dev_hard_start_xmit`这两个核心函数来实现...
2. 阻塞机制:使用 std::condition_variable 来实现阻塞机制,当队列为空时,消费者线程将被阻塞,直到生产者线程将数据加入队列中。 在 C++11 中,我们可以使用 std::condition_variable::wait 和 std::condition_...