数组的特点
1.数组是相同数据类型的元素的集合
2.数组中的各元素是有先后顺序的,它们在内存中按照这个先后顺序连续存放在一起
3.数组元素用整个数组的名字和它自己在数组中的顺序位置来表示。例如,a[0]表示名字为a的数组中的第一个元素,a[1]代表数组a的第二个元素,以此类推。
数组的定义
一维数组定义:
1.数据类型[] 数组名=new 数据类型[数组长度];
2.数据类型[] 数组名={数值,...};
3.数据类型[] 数组名=new 数据类型[ ]{数值,...};
二维数组定义:
1.数据类型 [][] 数组名 = new 数据类型[行][列];
2.数据类型 [][] 数组名 = {{值,...},...};
3.数据类型 [][] 数组名 = new 数据类型[][]{{值,...},...};
数组的使用
获取一维数组元素总数:数组名.length;
获取二维数组的行数:数组名.length;
获取二维数组的行的列数:数组名[r].length;
获取一维数组指定位置的数据:数组名[下标];
获取二维数组指定位置的数据:数组名[行下标][列下标];
取得数组某一位置的元素:数组名[索引值](索引值:及数组中元素的位置,从0开始,最大为数组长度-1)
队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。
队列可以用数组Q[1…m]来存储,数组的上界m即是队列所容许的最大容量。在队列的运算中需设两个指针:head,队头指针,指向实际队头元素;tail,队尾指针,指向实际队尾元素的下一个位置。一般情况下,两个指针的初值设为0,这时队列为空,没有元素。数组定义Q[1…10]。Q(i) i=3,4,5,6,7,8。头指针head=2,尾指针tail=8。队列中拥有的元素个数为:L=tail-head。现要让排头的元素出队,则需将头指针加1。即head=head+1这时头指针向上移动一个位置,指向Q(3),表示Q(3)已出队。如果想让一个新元素入队,则需尾指针向上移动一个位置。即tail=tail+1这时Q(9)入队。
添加元素方法
public void add(E e){
Object[] newArray=new Object[array.length+1];
for(int i=0;i<array.length;i++){
newArray[i]=array[i];
}
newArray[array.length]=e;
size++;
array=newArray;
}
删除元素方法①
public void delete(E e){
Object[] newArray=new Object[array.length-1];
for(int i=0;i<array.length-1;i++){
if(array[i].equals(e)){
newArray[i]=array[i+1];
for(int j=i+1;j<array.length-1;j++){
newArray[j]=array[j+1];
}
break;
}else
newArray[i]=array[i];
}
array=newArray;
size--;
}
删除元素方法②
public E remove(int index){
if(index<0||index>=size)
return null;
Object[] newArray=new Object[array.length-1];
for(int i=0;i<index;i++){
newArray[i]=array[i];
}
E e=(E)array[index];
for(int i=index+1;i<array.length;i++){
newArray[i-1]=array[i];
}
array=newArray;
size--;
return e;
}
修改元素方法①
public void fixa(E e,E f){
Object[] newArray=new Object[array.length];
for(int i=0;i<array.length;i++){
newArray[i]=array[i];
if(e!=null&&f!=null&&array[i]!=null&&array[i].equals(e)){
newArray[i]=f;
}
for(int j=i+1;j<array.length;j++){
newArray[j]=array[j];
}
}
array=newArray;
}
修改元素方法②
public void fix(E e,int index){
if(index<0||index>=size)
System.out.println("数组越界了!");
Object[] newArray=new Object[array.length];
for(int i=0;i<index;i++){
newArray[i]=array[i];
}
newArray[index]=e;
for(int i=index+1;i<array.length;i++){
newArray[i]=array[i];
}
array=newArray;
}
插入元素方法
public void insert(E e,int index){
if(index<0||index>=size)
System.out.println("数组越界了!");
Object[] newArray=new Object[array.length+1];
for(int i=0;i<index;i++){
newArray[i]=array[i];
}
newArray[index]=e;
for(int i=index+1;i<array.length+1;i++){
newArray[i]=array[i-1];
}
size++;
array=newArray;
}
分享到:
相关推荐
本话题主要探讨了两种常用的数据结构——数组和链表——在实现队列这一线性数据结构时的应用。队列是一种先进先出(First In First Out, FIFO)的数据结构,它的主要操作包括入队(enqueue)、出队(dequeue)以及...
循环队列是一种特殊的线性数据结构,它通过在数组末尾与开头相连形成一个逻辑上的环形空间,解决了普通数组作为队列时可能出现的溢出问题。下面将详细解释其中涉及的知识点: 1. **循环队列的基本概念**: 循环...
循环队列是一种线性数据结构,它具有队列的基本属性——先进先出(First In First Out, FIFO),但通过巧妙地利用数组的循环特性,可以避免数组两端操作的复杂性。在循环队列中,队尾指针在达到数组边界后会重新回到...
本篇文章主要探讨的是两种基本的数据结构——数组与链表。通过对比它们的特点、优缺点以及适用场景,帮助读者更好地理解何时选择哪种数据结构更为合适。 #### 数组与链表概述 **数组**是一种常见的数据结构,它是...
与数组实现的队列相比,链式队列具有更大的灵活性,因为不需要预先知道队列的最大长度。在C语言中,链式队列通常通过链表实现,每个节点包含数据和指向下一个节点的指针。带头结点的单循环链表是链式队列的常见形式...
3. 高级数据结构实现:如Java的`java.util.Queue`接口,提供了多种队列实现,如`ArrayDeque`(基于数组的双端队列)、`LinkedList`(链表实现)等。 队列的应用场景: 1. 打印机任务调度:新任务入队,完成的任务出...
在这个"数据结构入门——队列的实现.rar"的压缩包中,我们主要关注的是队列这一基础但重要的数据结构。队列,正如其名,模拟了现实生活中的排队现象,遵循“先进先出”(FIFO, First In First Out)原则。这意味着最...
### 队列的应用——舞伴配对问题 在计算机科学中,队列是一种非常重要的数据结构,它遵循先进先出(FIFO)的原则。在众多应用中,队列可以被用于解决各种现实世界的问题,其中之一就是“舞伴配对问题”。本篇详细...
数据结构课程队列的应用——杨辉三角,C语言版,将数据元素存储在一维数组中,按照一维数组的方式来实现对每一行元素的打印。
循环队列利用数组的循环特性,解决了普通数组队列在满时无法继续插入的问题;链队列则通过链表节点的动态链接,实现灵活的队列扩展。 “顺序栈.cpp”很可能是栈的一种实现,使用数组作为基础数据结构。数组栈的优点...
数据结构实验——队列(附程序) 数据结构实验报告——队列 一、实验目的: 1. 了解队列的特性。 2. 掌握队列的顺序表示和实现。 3. 掌握队列的链式表示和实现。 二、实验内容: 实验 3.3 队列的顺序表示和实现 ...
队列是一种基础且重要的数据结构,它遵循“先进...同时,结合栈的使用,队列可以帮助构建更复杂的算法,如广度优先搜索(BFS)等。因此,深入理解和掌握队列及其操作对于提升编程技能和解决问题的能力具有极大的价值。
数据结构——栈和队列经典测试题 一、栈和队列的概念和特点 栈是一种特殊的线性表,允许插入和删除运算的一端称为栈顶,不允许插入和删除运算的一端称为栈底。栈的特点是后进先出(Last In First Out,LIFO),即...
2. **双端队列(Deque)**:允许在队头和队尾同时进行入队和出队操作,提供更多灵活性。 3. **阻塞队列**:在多线程编程中,当队列为空时,出队操作会阻塞直到有新元素入队;反之,当队列满时,入队操作也会阻塞。 ...
相比于普通数组队列,环形队列具有更好的空间利用率,因为它可以避免数组两端扩展带来的开销。在Java中,我们可以使用数组或者链表来实现环形队列,但通常数组更常见,因为其在内存分配和访问上的优势。 创建环形...
本书《数据结构实验与习题——线性表栈和队列串数组树与二叉树》旨在帮助学生更好地理解和实践这些概念。 首先,书中介绍了C语言基础知识,这是实现数据结构的基础。C语言的基本输入输出、函数及其参数传递、以及...
在计算机科学中,数据结构是组织...通过这个项目,我们可以深入理解队列数据结构及其在C++中的实现,无论是顺序队列还是链式队列,都能帮助我们更好地设计和实现各种算法,尤其是在需要处理数据流或任务调度的问题中。
1、掌握队列的类型定义方法。 2、理解和掌握循环队列解决假溢出的方法。 二、实验内容 1、利用循环队列模拟舞伴配对问题:在舞会上,男、女各自排成一队。舞会开始时。依次从男队和女队的队头各出一人配成舞伴。如果...
总结起来,这个实验是一个很好的实践平台,让我们在理论学习和实际操作中巩固了队列的操作以及杨辉三角的计算,同时也提升了我们的编程和问题解决能力。在后续的学习中,我们应该继续关注不同数据结构的特性和应用,...