假设我有一个大小为[10]的数组,当该数组被填满时,我想实现一个FIFO结构,而不是它只是填满了,因此无法向数组中添加新的东西,并抛出旧的东西。
例如,如果我有一个包含汽车制造商的字符串数组,当我的数组中有10个制造商时,我希望删除最旧的条目,添加最新的条目,但要考虑kepping FIFO。我如何在这样的方法中实现它:
public void insert(String name)
{
int a;
a = (rear + 1) % names.length;
if(a == front)
{
System.out.println("Full Queue!");
}
else
{
rear = a;
names[rear] = name;
if(front == -1)
{
front = 0;
}
}
}
我试着像你一样用后部和前部建立一个队列。稍微修改了一下你的插页。我写了一个带有一些测试的主方法。
此外,我还必须添加一个“空”标志,以检查freer==front是因为是空的还是因为是满的。
public class DummyQueue {
int rear, front;
String[] names;
boolean empty = true;
public DummyQueue(int size) {
names = new String[size];
}
public void insert(String name)
{
if(!empty && rear == front )
{
System.out.println("Full Queue!");
}
else
{
names[rear] = name;
rear = (rear+1) % names.length;
}
empty = false;
}
public String deque()
{
if (empty) {
System.out.println("Empty Queue!");
return null; // demo
} else {
String response = names[front % names.length];
front = (front + 1) % names.length;
if (front == rear) empty = true;
return response;
}
}
public static void main(String[] args) {
DummyQueue d = new DummyQueue(10);
System.out.println(d.deque());
d.insert("Element");
System.out.println(d.deque());
System.out.println(d.deque());
for (int i = 0; i < 12; i++) {
System.out.println("Adding: "+i);
d.insert("Element "+ i);
}
for (int i = 0; i < 12; i++) {
System.out.println(d.deque());
}
}
}
我建议使用LinkedList
的实现
public class LinkedList {
Node head;
Node tail;
final int MAX_SIZE;
int currentSize;
public LinkedList(int MAX_SIZE) {
this.head = null;
this.tail = null;
this.MAX_SIZE = MAX_SIZE;
this.currentSize = 0;
}
public void append(String val) {
Node n = new Node(val);
if (currentSize < MAX_SIZE) {
if (head == null) {
head = n;
tail = n;
return;
}
Node current = head;
while (current.next != null) {
current = current.next;
}
current.next = n;
currentSize++;
}
else {
head = head.next;
currentSize--;
append(val);
}
}
public class Node {
String val;
Node next;
public Node(String val) {
this.val = val;
this.next = null;
}
}
基本上,您持有max_size
和currentsize
。当currentSize达到最大值时,删除LinkedList
的头部,并将该值追加到结尾。
我有一个用于队列的迭代器类(实现为循环数组)。我在下面附上代码。问题出在++运算符上。一旦它到达数组的末尾,它就会回到它的开始,因此迭代器会指向第一个元素。它工作得很好,但我没有办法使用这种方法实现then end()迭代器。在队列类中返回begin()和end()迭代器的函数可以在底部看到。end()迭代器应该指向队列的后部,但是当数组已满且后部等于数组的大小时,++运算符将循环返回,而不是让它
我正在从Sahni的“C语言数据结构基础”中学习数据结构。在使用动态数组的循环队列中,作者提到了以下几点, 假设capacity是循环队列的初始容量,我们必须首先使用realloc增加数组的大小,这将把最大容量元素复制到新的数组中。为了获得正确的循环队列配置,我们必须将右段中的元素(即元素a和B)滑动到数组的右端(参见图3.7.d)。数组加倍和向右滑动一起最多复制2*容量-2个元素。
循环队列(Circular Queue) 1. 循环队列的概念 1.1 循环队列的定义 为了能够充分地使用数组中的存储空间,克服”假溢出”现象,可以把数组的前端和后端连接起来,形成一个环形的表,即把存储队列元素的表从逻辑上看成一个环,成为循环队列(circular queue)。 1.2 循环队列中各元素的逻辑及存储关系 循环队列的首尾相接,当队头指针front和队尾指针rear进到maxSize
本文向大家介绍C++实现循环队列,包括了C++实现循环队列的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了C++实现循环队列的具体代码,供大家参考,具体内容如下 circularQueue.h main.cpp 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐喊教程。
问题内容: 当实现像队列这样的FIFO时,我的教练总是建议我们将其表示为圆形数组,而不是常规数组。为什么? 是因为在后者中,我们最终将在数组中包含垃圾数据吗? 问题答案: 如果您使用固定数量的Array-Slots / Elements,则以循环方式回收插槽比较容易,因为您不需要重新排列Elements的顺序。每当第一个Element以类似Array的方式移除时,您都必须将剩余的Elements向
到目前为止,这就是我的答案,但从逻辑上讲,我的答案对于findNextCity方法似乎是错误的。此外,我甚至不知道如何处理问题的第二部分(以下)。 我应该遍历cityQueue中的每个元素,使用下一种方法计算的欧几里德距离(distbetweencies),确定哪个元素最接近当前城市(从第一个参数)。我必须忽略已经标记在堆栈中或堆栈中的城市以及当前城市本身(否则,城市将始终是离自身最近的城市!)。