1.为什么要用到队列
我们都学过数组,知道数组在定义时必须明确他的长度。顺便复习下数组的定义的一些规则;
数组要如下定义
如:数据类型 [] 数组名=new 数据类型[数组长度(必须有)];
数据类型 [] 数组名={值...};
数据类型 [] 数组名=new 数据类型[]{值...};
//先声明数组
数据类型 [] 数组名;
数组名=new 数据类型[数组长度];或者 数组名=new 数据类型[]{值..}
以下这种情况是不允许的
数据类型 [] 数组名;
数组名={值..}
这种情况在声明数组的时候并没有给他分配内存空间,也就不能给他赋值。
类似的二维数组也和一维数组的定义方法是一样的,只是把[]改成[][].
可以看出来,定义一个数组后,内存分配给他的空间就固定了。但是我们要用数组来存储东西时,有时候并不知道要存储多少个元素,所以在定义数组时我们不知道要给他定义多大的长度(分配多少空间给他)。或许有的同学会这样想,既然要用来存储东西,我们就给数组一个非常大的空间,让他足够来存储就行了,可想而知,这种做法是非常浪费内存空间的。所以就出现了队列来解决这个问题。
2.什么是队列
队列是一个我们自己创建的类,(和一般我们定义的类相同,只是方法和属性上的区别)
既然队列是用来解决数组存储元素中无法解决的一些问题,所以可以这样来理解队列:队列其实也是一个“数组”,但他的功能比数组强,他没有明确、固定的长度,可以任意添加、删除、移动..队列中的元素(视具体队列中的方法而定)。
3队列的定义
既然队列是一个类,所以队列的定义和一般类的定义是完全相同的。
如:public class 队列类名{}
4队列中属性和方法的定义
由于队列和一般的类是有区别的,他和数组一样可以看成是一个容器,是要用来存储元素的
所以类中我们给必须他声明一个数组属性,其还要实现一些数组无法实现的功能,所以还要一些具体的方法,请看如下一个队列的代码
/ * 创建一个队列类
* l
*
*/
public class DuiLie {
//声明一个数组对象,数据类型用Object,因为Object为所有类的父类这样队列可以存储不同类型对象的元素,给数组的长度定为一,
Object [] array=new Object [0];
//定义一个往队列末尾添加一个元素的方法
public void add(Object o){
//创建一大新数组,长度比原来数组大一
Object [] array2=new Object[array.length+1];
//把原来数组里的元素复制到新数组中
for(int i=0;i<array.length;i++){
array2[i]=array[i];
}
//把元素o添加到新数组末尾
array2[array.length]=o;
//将两个数组交换,这步很重要,把原来的数组指向新的数组,就的数组空间被释放,可 以理解为新的数组取代了旧的数组的位置。
array=array2;
}
//定义一个获取队列中任一元素的方法,参数index即获取元素的索引
public Object get(int index){
return array[index];
}
//定义一个获取队列长度的方法
public int size(){
return array.length;
}
}
以上是一个简单的队列定义,估计只要大体看下都能看懂,而队列其他的一些功能,比如说从队列中删除任一元素,往队列中任意位置添加一个元素,或者把一个队列或一个数组中的元素全部添加到队列中,这些都是可以实现的,只要你想得到的对元素存储删除的操作大体都能实现,关键看你怎么去写对应的方法了。
接下来让我们来检测一下这个对列
创建一个队列测试类
public class DuiLieTest {
/**队列测试类
*
*/
public static void main(String[] args) {
//创建一个队列对象
DuiLie dl=new DuiLie();
//向队列中添加三个元素
dl.add("abc");
dl.add("efg");
dl.add("opq");
//把队列中的元素输出来
for(int i=0;i<dl.size();i++){
//获取队列中的元素,该元素为Object类型的
Object o=dl.get(i);
//得将该元素转化成字符串类型
String s=(String)o;
//输出字符串
System.out.println("第"+(i+1)+"个元素是:"+s);
}
//输出队列长度
System.out.println("队列长度是:"+dl.size());
}
}
执行上面的代码便可看到命令行的相应输出:
第1个元素是:abc
第2个元素是:efg
第3个元素是:opq
队列的长度是:3
分享到:
相关推荐
数据结构中的队列是一种线性数据结构,遵循先进先出(First In First Out,FIFO)的原则,即最先进入队列的元素将是最先被处理的。与栈不同,队列允许在一端(通常称为队尾)进行元素的插入,在另一端(通常称为队头...
循环队列是一种线性数据结构,它在计算机科学中被广泛应用于数据缓存、消息队列等场景。相比于传统的队列,循环队列利用数组的循环特性,避免了队列满或空时需要重新分配内存的问题,提高了空间利用率和操作效率。在...
GCD的核心概念包括队列和任务,本篇文章将深入探讨这两种核心元素,以及如何在实际项目中运用它们。 ### 1. GCD 的基本概念 GCD 是基于 C 语言的,但在 Objective-C 和 Swift 中都可以使用。它是Apple的系统级并发...
- **循环队列**:顺序队列的一种优化形式,通过改变队头和队尾指针的移动方式,避免队列中的“假溢出”现象。 - **链式队列**:通过一组任意的存储单元存储队列中的元素。 **相关算法:** - **入队**:在队列尾部...
本篇文章将对几种常见的队列进行深入的总结和探讨。 首先,我们来看最基本的**线性队列**,也称为顺序队列。线性队列在内存中通常是通过数组实现的,它的入队操作在队尾进行,出队操作在队头进行。当队列满时,可以...
"Java 消息队列技术总结" Java 消息队列是分布式系统中重要的组件,主要解决应用解耦、异步消息、流量削锋等问题,实现高性能、高可用、可伸缩和最终一致性架构。常用的消息队列有 ActiveMQ、RabbitMQ、ZeroMQ、...
#### 四、总结 本篇介绍了如何使用C语言实现链式队列的基本操作,包括初始化队列、入队列、出队列以及销毁队列。链式队列是一种非常实用的数据结构,在实际应用中可以有效地管理动态变化的数据集。通过对这些基本...
#### 五、总结 通过上述步骤,我们可以有效地解决SAP PI中的队列堵塞问题。重要的是要密切关注队列的状态,并及时采取措施处理堵塞情况,以确保系统的稳定运行。此外,熟悉SMQ2和其他监控工具的功能,能够帮助我们...
应用题及知识点总结 第四章队列应用题及知识点总结 第四章队列应用题及知识点总结 第四章队列应用题及知识点总结 第四章队列应用题及知识点总结 第四章队列应用题及知识点总结 第四章队列应用题及知识点总结 第四章...
总结 在本节中,我们讨论了队列的删除操作,并对其进行了详细的分析。我们了解了队列的基本概念,队列的删除操作,队列的实现,队列的添加操作和队列的遍历操作。通过对队列的理解,我们可以更好地理解和应用队列在...
优先队列、图等总结及习题 优先队列是一种特殊的队列结构,它的出队顺序是根据元素的优先权决定的,而不是元素入队的顺序。优先队列的操作包括查找、插入和删除,删除操作是根据优先权高或低的次序进行的。 一、...
链式队列是一种在计算机科学中广泛...- **总结与改进**:总结实验结果,提出可能的优化策略和未来改进的方向。 通过学习和实践这些基本操作,可以深入理解链式队列的原理,并为更复杂的算法和数据结构打下坚实的基础。
总结来说,这个项目提供了使用C语言实现队列的实例,包括创建、插入、删除、检查队列状态和销毁队列的全部功能。通过分析这些文件,你可以深入理解C语言中如何手动构建和管理数据结构,这对于学习和理解操作系统、...
在IT行业中,消息队列(Message ...总结来说,C#中的MSMQ为开发者提供了一种高效、可靠的异步通信方式。通过理解和掌握消息队列的概念及其在C#中的实现,可以极大地优化你的应用程序架构,提升系统的稳定性和可扩展性。
- 采用队头/队尾间隔至少一个空闲元素的方法实现循环队列,这样可以避免队列的物理连续性与逻辑连续性的混淆,同时便于检测队列是否为空或满。 - 当队列为满时尝试执行入队操作,或者队列为时空执行出队操作时,...
【栈和队列的基本概念】 栈是一种特殊的线性表,具有“后进先出”(LIFO,Last In First Out)的特点。栈的主要操作包括入栈(Push)和出栈(Pop)。入栈操作是在栈顶添加元素,而出栈则是删除栈顶元素。栈的应用...
总结来说,串口缓冲区结合循环队列的设计,为STM32F103ZET6上的串口通信提供了一种高效、可靠的解决方案。通过合理地管理和操作循环队列,可以在保证数据完整性的同时,有效平衡数据的接收和处理速度,提升系统的...
#### 五、总结 通过以上分析,我们可以了解到链式队列的基本概念、结构及其实现方法。链式队列相比于顺序队列具有更好的动态扩展能力,适用于需要频繁进行入队和出队操作的应用场景。理解链式队列的基本操作有助于...
总结,"tp5.1消息队列 think-queue" 是一种在ThinkPHP5.1环境中实现消息队列的方式,通过使用think-queue组件,开发者可以轻松地创建和管理异步任务,提高应用的并发处理能力和系统稳定性。理解其安装、配置、使用...
总结来说,“入队列出队列练习”是学习LabVIEW中队列操作的一个良好起点。通过实践,用户可以深入理解队列的工作原理,以及如何在实际项目中有效地使用队列。通过不断地实践和探索,LabVIEW的使用者能够逐步提高其在...