/**
* 定义一个接口类(定义数组的增加,删除,按下标查询,返回队列长度)的方法
*/
package 队列增删改查;
public interface IFunction {
//向队列中加入一个元素
public void add(String s) ;
//删除数组中指定下标的元素
public void delete(int index);
//将元素插入到指定的位置
public void insert(String s,int index);
//获取队列中指定的下标的元素
public String get(int index);
//得到队列的长度
public int size();
}
/*
* 实现接口中的方法
*/
package 队列增删改查;
public class FunctionTest implements IFunction {
String[] s1 = new String[0]; //首先定义一个元素个数为0的数组
//向队列末尾加入一个元素方法的实现:
//先将原来的数组复制到新的数组中去,在将加进来的元素补到新的数组的末尾
public void add(String i2) {
String[] s2 = new String[s1.length+1]; //首先定义一个比原来的数组大一的新的数组
for(int i = 0; i < s1.length; i++) { //利用循环将旧的数组复制到新的数组中
s2[i] = s1[i];
}
s2[s1.length] = i2; //将加进来的新的元素补到新数组的末尾
s1 = s2; //将原来的数组指向新的数组,以下方法出现均同理
}
//删除数组中指定下标的元素
public void delete(int index) {
String[] s2 = new String[s1.length-1]; //先定义一个比原来数组小1的数组
for(int i = 0; i < s1.length-1; i++) { //利用循环和判断语句分别将旧数组的元素复制到新的数组中
if(i < index) {
s2[i] = s1[i]; //当i < index 时直接复制
}
else s2[i] = s1[i+1]; //当i >= index时,将旧的数组的下一个下标的元素复制到新的数
} //当前的下标下
s1 = s2;
}
//将元素插入到指定的位置
public void insert(String s, int index) {
String[] s2 = new String[s1.length+1];
for(int i = 0; i < s1.length; i++) {
if(i < index) { //利用循环并判断,
// 当i<index时直接复制到新的数组中去
s2[i] = s1[i];
}
else if(i == index) { //当i = index 时 将要插入的元素插入到新数组的当前下标下
s2[i] = s;
}
else
for(int j = index; j < s1.length; j++) { //当i > index 时 利用循环将旧的数组从下标等于index的元素起
s2[j+1] = s1[j]; //依次复制到新的数组的比其大1的下标下
}
}
s1 = s2;
}
//获取队列中指定的下标的元素
public String get(int index) {
return s1[index]; //返回指定下标的元素
}
//得到队列的长度
public int size() {
return s1.length; //调用length方法返回队列的长度
}
}
/**
* 程序入口类
*/
package 队列增删改查;
public class Main {
public static void main(String[] args) {
FunctionTest fun = new FunctionTest();
//向队列中加入十个元素
for(int i = 0; i < 10; i++) {
String s = i+"";
fun.add(s);
}
//打印出每个元素
System.out.println("加入十个元素后队列的元素如下:");
for(int i = 0; i < fun.size() ; i++) {
System.out.print(" "+fun.get(i)); //调用get()方法打印出每个元素
}
System.out.println();
//返回队列的长度
System.out.println("队列的长度为"+fun.size()); //调用size()方法打印出队列的长度
//删除指定下标的元素
fun.delete(3);
//打印出删掉后队列的各个元素
System.out.println("删除指定元素后队列的元素如下(删除下标为3的元素):");
for(int i = 0; i < fun.size(); i++) {
System.out.print(" "+fun.get(i));
}
System.out.println();
//返回队列删除元素后队列的长度
System.out.println("删除后队列的长度为"+fun.size());
//向指定的位置插入元素
System.out.println("向指定下标(4)插入指定元素(100)后队列变为:");
fun.insert("100", 4);
for(int i = 0; i < fun.size() ; i++) {
System.out.print(" "+fun.get(i));
}
System.out.println();
System.out.println("插入后元素的个数变为"+fun.size());
}
}
输出结果:
加入十个元素后队列的元素如下:
0 1 2 3 4 5 6 7 8 9
队列的长度为10
删除指定元素后队列的元素如下(删除下标为3的元素):
0 1 2 4 5 6 7 8 9
删除后队列的长度为9
向指定下标(4)插入指定元素(100)后队列变为:
0 1 2 4 100 5 6 7 8 9
插入后元素的个数变为10
相关推荐
总之,`PriorityQ.java`文件可能是一个简单的数组实现优先队列的示例,通过分析这个文件,我们可以学习到如何利用数组数据结构实现优先队列,以及理解其核心的插入、删除和查找操作。同时,这也能帮助我们更好地掌握...
Java中的队列是一种数据结构,它遵循先进先出(FIFO)原则,即最先插入的元素将是最先被删除的。在Java中,队列的实现主要有三种:顺序队列、链式队列和循环队列。下面我们将详细探讨这三种队列的实现方式。 1. **...
但插入和删除操作(尤其是删除队首元素)可能涉及大量元素的移动,效率较低。 **链表实现队列** 1. **链表基础**:链表中的元素在内存中不一定是连续的,通过节点之间的指针连接。每个节点包含数据和指向下一个...
下面将详细讲解这两种数据结构的实现原理、插入与删除操作,以及如何在C语言中进行演示。 首先,让我们了解**链式栈**。链式栈是一种线性数据结构,其元素(节点)存储在内存中的非连续位置,通过指针链接。每个...
- **数组实现**:最简单的队列实现方式是使用一维数组,通过两个指针分别跟踪队头和队尾的位置。 - **链表实现**:链表也可以用于实现队列,每个节点包含数据和指向下一个节点的指针,同样维护队头和队尾节点。 -...
8. **错误处理**:在实现过程中,要特别注意边界条件的检查,如队列是否为空、插入位置是否合法等,以防止程序运行时出现未定义行为。 9. **测试**:为了验证二项队列的正确性,需要编写测试用例,包括插入不同数量...
这使得双向队列在处理任务时更加灵活,例如在需要快速插入新元素或删除特定元素的场景下,双向队列会比单向队列更具优势。 第一种实现方式是基于数组的key进行进出队列操作。在这种方法中,我们可以使用PHP数组作为...
这两个方法首先检查队列是否已满,若未满则进行插入操作,并更新指针位置和元素数量。 - 如果指针到达数组边界,则回绕到另一端继续使用空间。 3. **删除操作**: - `removeLeft()` 和 `removeRight()` 方法实现...
`linkqueue`可能是实现链表队列的源代码文件,包含上述关键函数的定义和实现。文件中可能有结构体定义,如`node`,用于存储队列节点的数据和指针,以及队列结构体`Queue`来保存队头和队尾节点指针。此外,还可能包含...
- **插入操作**:当向优先队列中添加新元素时,首先将其添加到堆的末尾,然后通过上浮操作调整元素的位置,确保堆的性质不被破坏。 - **删除操作**:移除优先队列中的最高优先级元素通常是指移除堆的根节点。此操作...
队列的逆置,即对队列中的元素顺序进行反转,可以使用以下几种方法实现: 1. **栈辅助逆置**:创建一个空栈,依次将队列中的元素出队并压入栈中,直到队列为空。然后将栈中的元素依次弹出并入队,这样队列就被逆置...
根据给定文件的信息,我们可以详细地探讨一下最大优先队列和最小优先队列的基本操作。 ### 一、优先队列概述 优先队列是一种抽象数据类型,它支持...希望以上内容能够帮助您更好地理解优先队列的基本概念和实现细节。
总结,用堆实现的优先队列在Java中是一种高效的数据结构,能够快速地获取和删除最高优先级的元素。通过分析PriorityQueue类和PQTest类的代码,我们可以深入了解堆的内部机制以及如何在实际应用中使用优先队列。
在C语言中实现优先队列,通常会选择使用堆数据结构,因为它可以保证插入、删除和查找操作的时间复杂度为O(logn),其中n是队列中的元素数量。堆是一种近似完全二叉树的结构,可以分为大顶堆和小顶堆。小顶堆的性质是...
循环队列的结构通常包含三个部分:存储元素的数组`base`、队头位置`front`和队尾位置`rear`。队头是最早进入队列的元素,而队尾是最近插入的元素。在循环队列中,`front`和`rear`可以超出数组的实际边界,但通过模...
下面我们将详细探讨循环顺序队列的表示和实现,以及如何进行初始化、添加和删除元素等操作。 首先,我们需要理解循环顺序队列的基本概念。队列是一种先进先出(FIFO,First In First Out)的数据结构,类似于现实...
由于队列是循环的,当队尾指针到达数组末尾时,下一个元素会插入到数组的开头。具体步骤如下: 1. **判断队满**:如果 `(rear + 1) % 队列容量 = front`,说明队列已满,不能进行入队操作。 2. **插入元素**:否则,...
2. **内存碎片**:链表队列可能会导致内存碎片化,尤其是频繁的插入和删除操作,这可能会降低程序的性能。 3. **访问速度**:相比于数组队列,链表队列在访问数据时可能效率较低,因为需要遍历链表才能到达指定位置...