数组队列的一些知识
数组的优点和缺点
数组有哪些优点
线性结构的存储方式(连续存储空间)
数据的读取速度快。
数组有哪些缺点
1.数组中只能存储一种数据类型。
2.开辟的空间是固定的。
2 数组队列的实现思路
1.定义数组,数组名中存储的是什么?
内存的首地址
2.如果改变数组名中存储的地址,那么数组指向的内存空间是不是改变了?
int [] array = new int[10];
array = new int[11];
3.数组队列的实现步骤
1.定义一个类,类中有两个属性:一个是数组,一个元素总数;
2.定义构造方法,实例化数组对象;
3.定义添加元素的方法
1.建立一个新的数组,该数组的长度是元素总数的长度加1
2.循环属性数组中的内容,存入到新数组中
3.将要添加的元素放到新数组的最后一个位置
4.元素总数要加1
5.将新数组名中存储的地址给属性数组。
4.定义删除元素的方法
5.定义返回元素总数的方法
6.定义一个方法用来获取指定索引位置的元素。
4.Java的泛型
泛型是使用E来表示。
E表示什么?
表示的是存储的数据类型,E是没有确定的类型的。
E不是Java的任何一种数据类型,只是一个符号,可以用Java的任何一种
引用数据类型来代入。
E就是用来表示Java中的任意一种数据类型。
Object是Java所有类的父类。
package Arraylist; import java.util.Collection; public interface MyArraylist<E> { public void add(E e);//添加元素的方法 public boolean remove(int index);//移除元素的方法 public int size();//获取数组队列的元素总数 public E get(int index);//获取指定索引位置的元素 public boolean add1(E e);//将指定的元素添加到此列表的尾部。 public boolean add(int index, E element);// 将指定的元素插入此列表中的指定位置。 public boolean addAll(Collection<? extends E> c) ; //按照指定 collection 的迭代器所返回的元素顺序,将该 collection 中的所有元素添加到此列表的尾部。 public void clear() ; //移除此列表中的所有元素 public int indexOf() ; // 返回此列表中指定位置上的元素 public boolean isEmpty() ; //返回此列表中首次出现的指定元素的索引,或如果此列表不包含元素,则返回 -1。 public int lastIndexOf(Object o1); //如果此列表中没有元素,则返回 true public E remove1(int index) ; // 移除此列表中指定位置上的元素。 public boolean remove(Object o) ; // 移除此列表中首次出现的指定元素(如果存在)。 public E set(int index, E element);// 用指定的元素替代此列表中指定位置上的元素。 }
package Arraylist; /** * 数组队列的测试demo类 * * @author lby * */ public class MyArrayListDemo { public static void main(String[] args) { // 实例化一个数组队列对象。 MyArraylist<Object> mal = new MyArrayListImpl<Object>(); mal.add("字符串");// 向队列中添加元素 for (int i = 0; i < 10; i++) { mal.add(i);//调用添加元素的方法 } mal.add(new MyArrayListImpl<Object>()); // 输出信息 for (int i = 0; i < mal.size(); i++) { System.out.println(mal.get(i)); } //调用删除的方法 mal.remove(5); // 输出信息 for (int i = 0; i < mal.size(); i++) { System.out.println(mal.get(i)); } //调用指定位置添加对象的方法 mal.add(3,"字符串"); for (int i = 0; i < mal.size(); i++) { System.out.println(mal.get(i)); } } }
package Arraylist; import java.util.Collection; /** * 自定义的数组队里实现类,该类要实现MyArrayList接口 * * @author lby * */ public class MyArrayListImpl<E> implements MyArraylist<E> { // 声明一个原始数组对象,长度是0 private Object[] array; // 声明一个存储数组中元素的总数变量 private int size = 0; /** * 构造方法 */ public MyArrayListImpl() { array = new Object[0]; } /** * 构造方法 */ public MyArrayListImpl(int size) { array = new Object[size]; } /** * 向队列的末尾添加元素 */ public void add(E e) { // 定义一个新的数组,该数组的长度是原始数组的长度加1 Object newarray[] = new Object[size + 1]; // 将原始数组中的内容复制到newarray for (int i = 0; i < size; i++) { // 复制操作 newarray[i] = array[i]; } // 将新元素添加newarray数组的最后一个位置 newarray[size] = e; // 统计元素个数的计数器要加1 size++; // 交换地址 array = newarray; } /** * 从队列中移除指定索引位置的元素 */ public boolean remove(int index) { // 定义一个新的数组,该数组的长度是原始数组的长度减1 Object newarray[] = new Object[size - 1]; // 判断index索引是否在范围之内 if (index >= 0 && index < size){ // 将原始数组中的内容复制到newarray for(int i=0;i<index;i++){ // 复制操作 newarray[i] = array[i]; } for(int i=index+1;i<size;i++){ // 复制操作 newarray[i-1] = array[i]; } }else{ return false; } // 统计元素个数的计数器要减1 size--; // 交换地址 array = newarray; return true; } /** * 获取数组队列中的元素总数 */ public int size() { return array.length; } /** * 获取数组队列中指定索引位置的元素 */ public E get(int index) { // 判断index索引是否在范围之内 if (index >= 0 && index < size){ return (E)array[index]; } return null; } //将指定的元素添加到此列表的尾部。 public boolean add1(E e) { Object newarray[] = new Object[size + 1]; // 将原始数组中的内容复制到newarray for (int i = 0; i < size; i++) { // 复制操作 newarray[i] = array[i]; } // 将新元素添加newarray数组的最后一个位置 newarray[size] = e; // 统计元素个数的计数器要加1 size++; // 交换地址 array = newarray; return false; } // 将指定的元素插入此列表中的指定位置。 public boolean add(int index, E e) { Object [] obj=new Object[size+1]; for(int i=0;i<index;i++) { System.out.println("hhih"); obj[i]=array[i]; } obj[index]=e;//添加新元素到指定位置 for(int j=index;j<size;j++)//将后面的元素加进去 { obj[j+1]=array[j]; System.out.println("hhih"); } array=obj; return false; } //按照指定 collection 的迭代器所返回的元素顺序,将该 collection 中的所有元素添加到此列表的尾部。 public boolean addAll(Collection<? extends E> c) { return false; } //移除此列表中的所有元素 public void clear() { Object[] obj=new Object[0]; array=obj; } // 返回此列表中指定位置上的元素 public int indexOf() { Object o1 = null; int length=array.length; for(int i=0;i<=length;i++) { if(array[i]==o1) return i; } return -1; } //返回此列表中首次出现的指定元素的索引,或如果此列表不包含元素,则返回 -1。 public boolean isEmpty() { return size()==0; } //如果此列表中没有元素,则返回 true public int lastIndexOf(Object o1) { int length=array.length; for(int i=length-1;i<=0;i--) { if(array[i]==o1) return i; } return -1; } // 移除此列表中指定位置上的元素。 @SuppressWarnings("unchecked") public E remove1(int index) { int length=array.length;//设置数组的长度 Object [] obj=new Object[length+1];//重新定义新的数组 for(int i=0;i<index;i++) { obj[i]=array[i];//保留数组 } for(int j=index+1;j<length+1;j++) { obj[j-1]=array[j]; } array=obj; if(index>size||index<0) System.out.println("+index+"+index+size+",size"); return (E)obj[index]; } // 移除此列表中首次出现的指定元素(如果存在)。 public boolean remove(Object o1) { int length=array.length; for(int i=0;i<=length;i++) { if(array[i]==o1) return true; } return false; } // 用指定的元素替代此列表中指定位置上的元素 public E set(int index, E e) { int length=array.length; Object [] obj=new Object[length+1]; for(int i=0;i<index;i++) { obj[i]=array[i]; } obj[index]=e;//添加指定的元素 for(int j=index;j<length+1;j++) { obj[j]=array[j]; } array=obj; if(index>size||index<0) System.out.println("+index+"+index+size+",size"); return (E)obj[index]; } }
相关推荐
队列是一种先入先出的数据结构(FIFO),只允许在前端(front)删除,在后端(rear)插入。容量为capacity大小的内存,只能存capacity-1的元素,其中rear的位置始终为空。 本文实现的队列,功能如下: 1 获取元素内容 ...
普通队列 1)将尾指针往后移:rear+1,当front==rear【空】 2)若尾指针rear小于队列的最大下标maxSize-1,则将数据存入rear所指的数中组元素中,否则无法存入数据。rear==maxSize-1[队列满] 环形队列 1)front变量的...
### 循环链表队列与循环数组队列的代码实现解析 在计算机科学中,队列是一种重要的数据结构,遵循先进先出(FIFO)原则。队列可以使用多种方式实现,包括链表和数组。本文将深入探讨两种队列实现方式:循环链表队列...
此程序使用数组队列来存储温度数据,并在队列中保持固定数量的最新测量值。当新的温度读数到来时,如果队列已满,最旧的数据会被新数据替换。此外,程序提供了一个函数来计算队列中最新数据的平均值。 主要功能点:...
在Java中,我们可以使用数组来实现优先队列。这篇文章将探讨如何利用数组实现优先队列,并通过提供的`PriorityQ.java`文件来深入理解其实现原理。 1. **优先队列基本概念** 优先队列是一种数据结构,它维护了一个...
学习数据结构过程中,亲自在VC++上编译通过的使用数组实现队列的源代码,与大家共享。
在普通数组队列中,一旦队列满或空,需要进行数组的重新分配,而循环队列则避免了这个过程,提升了性能。 在编程语言中,如C、C++、Java或Python,我们可以用不同的方式实现数组循环队列。例如,在C++中,可以定义...
Java数组队列是一种基于数组实现的线性数据结构,它遵循先进先出(FIFO,First In First Out)的原则。在Java中,数组队列通常用于处理数据的顺序处理,例如任务调度、消息传递等场景。以下是关于Java数组队列的一些...
### 队列数组实现 #### 概述 在计算机科学中,队列是一种非常基本的数据结构,它遵循先进先出(FIFO)的原则。队列可以被用来解决多种问题,比如任务调度、缓存管理等。队列可以通过多种方式实现,其中一种常见的...
本文主要探讨了如何利用数组的特性,特别是`push`、`shift`方法实现队列的先进先出(FIFO)原则,以及`forEach`方法在数组操作中的应用和注意事项。 ### 数组与队列 在JavaScript中,数组天生支持队列的操作。`...
为了实现队列操作,数组队列通常需要两个额外的变量来跟踪队头和队尾。添加元素时,如果队列已满,则需要进行扩容操作;移除元素时,如果队列为空,会抛出异常。这种基于数组的队列虽然在空间效率上比链表实现的队列...
以下是一个使用C++模板类实现的循环数组队列: ```cpp template class MyQueue { private: struct myq { int head, rear; T* ele; }; myq* q; const int Max; public: // 构造函数 MyQueue() { q = new ...
由数组实现队列,包括队列的创建、入队和出队。通过打印显示出队的结果。正在学习数据结构的童鞋可以参考。
**泛型循环队列**,也称为环形队列,利用数组的循环特性,使得队列的首尾可以无缝连接。这种队列在处理大量数据流时有更高的效率,因为它避免了数组的动态扩展和收缩。在C#中,我们可以通过自定义类来实现泛型循环...
数组队列是另一种基于数组的数据结构,它遵循“先进先出”(FIFO)原则。你可以使用`enqueue`方法在队尾添加元素,`dequeue`方法从队头移除元素,同时支持`size`和`isEmpty`等操作。 4. **单链表(SLL)**: ...
在PHP中,实现队列的功能通常会借助数组及其内置函数来模拟队列的基本行为。队列是一种先进先出(First In First Out, FIFO)的数据结构,类似于现实生活中的排队等候系统,如银行的排号机,最先排在队伍中的人会...
### 基于数组的队列 #### 概述 本篇内容介绍了一种改进的基于数组实现的队列结构,特别之处在于引入了一个`tag`标记来优化队列的操作判断逻辑,使得队列在判空(判断是否为空)与判满(判断是否已满)时更加高效...
循环数组实现队列 队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作。队列的操作受限制,和栈一样,它是一种操作受限制的线性表。进行插入操作的...
配套代码讲解:https://blog.csdn.net/songchuwang1868/article/details/90200251 ...同步队列-无锁队列-循环数组无锁队列 同步队列-无锁队列-循环数组无锁队列 同步队列-无锁队列-循环数组无锁队列
java数组实现循环队列。包括入队, 出队,输出队列。 队列先入先出。