数组队列——当用数组不方便的时候,数组队列是非常方便的。数组队列的长度可改变
,存储数据的类型也可以是多样的。这点是数组所不具备的有优点,所以我们可以用数
组队列来记录比如说五子棋中下过的棋子,所以我觉得数组队列是有“记忆功能”的。
因为它的长度可以改变嘛,所以比如说每下一步棋,长度就可以加一,以前的数据也不
会被覆盖掉。
链表呢是有一个部分用来存储数据,一个部分用来指向下一个地址,这是单链表,还有
双链表和循环链表,这样我们使用起来的时候就很方便了,下面我用代码来比较一下数
组队列和链表。
增加数据:
数组队列:array[i]是之前定义好的一个一维数组
public void add(Object element){
Object array1[] = new Object[size+1];
for(int i=0;i<size;i++){
array1[i] = array[i];
}
array1[size] = element;
size++;
//将新的数组名赋给array
array = array1;
}
链表:
public void add(Node node){
// 如果根节点地址为空,则表示没有连表内没有节点
if(root == null){
root = node; //将新的节点赋值给根节点
tail = node; //将新的节点赋值给尾节点
}else { //链表不为空
tail.setNext(node);//在尾节点后面添加节点
node.setLast(tail);
tail = node; //再将新节点赋值给尾节点
}
size++; //链表的大小要增加
}
虽然代码都差不多,但是其实从执行效率来说,一定是链表大于数组队列的,因为数组
队列增加数据的时候,数组队列是需要把原先的数组先赋给新的数组,再把最后一个元
素放进新数组的最后一个位置。而链表直接把最后尾节点的指针再指向新增加的元素就
可以了。
这是添加元素,也许优势不是很明显,但是看下面这一段修改元素值得方法:
数组队列:
public Object alter(int index,Object element){
Object [] array4 = new Object[size];
for(int i=0;i<index;i++){
array4[i] = array[i];
}
array4[index]=element;
for(int j = index+1;j<size;j++){
array4[j] = array[j];
}
链表:
public Object update(int index,Object newobj){
Node node = root;
for(int i=0;i<=index;i++){
node = node.getNext();
}
node.setobj(newobj);
return node.getobj();
}
数组队列中修改元素值需要创建一个新的数组,将要修改值得前面部分全部赋给新的数
组,然后将修改后的值赋给新数组的最后一个元素,再把原来数组中需要修改的值得后
面部分赋给新数组。这样显得很笨重。链表呢可以直接找到要修改的那个地方,直接给
它附上新值就可以了。除此之外,插入,移除元素,链表都比数组队列效率要高。那么
你就会想,既然链表这么方便,为什么还要用数组队列呢,其实不然,数组队列有一个
极大的好处,就是查找非常方便,而链表的优点就是增删改非常方便,所以各取所需嘛
。下面来对比一下两个的查找功能。
数组队列:
public Object get(int index){
if(index<=0 || index>=size){
return null;
}
return array[index];
}
链表:
public Object get(int index){
if(index<0 || index>=size){//如果索引值小于0或者大于链表长
度,返回空值
return null;
}
Node node = root; //如果符合条件,将根节点赋值给一个
新的节点
for(int i =0;i<index;i++){
node=node.getNext(); //一个一个查找,
不断将节点的下一个值赋给node,最后找到
}
//index-1的时候停止,因为它的下一个就是我么要找的index的值,赋给node
return node.getobj();
}
数组因为有下标,就非常好找,而链表找起来要从头开始遍历。
对于数组队列,我还不能说特别懂,但至少用数组队列来做过一个五子棋,或多或少还
是懂得一些它的用处了,但是链表还不是很熟,用链表排过序,用的选择排序,比数组
方便的多,只要再链表中定义了一个交换元素的方法,选择排序、冒泡排序这些简单的
排序几步就能搞定了。
关于链表的真正用途这些还有待进一步发现和使用。
分享到:
相关推荐
本话题主要探讨了两种常用的数据结构——数组和链表——在实现队列这一线性数据结构时的应用。队列是一种先进先出(First In First Out, FIFO)的数据结构,它的主要操作包括入队(enqueue)、出队(dequeue)以及...
数组、链表、队列、栈的区别和联系 在数据结构中,数组、链表、队列、栈是四种常用的数据结构,它们之间有着紧密的联系,但同时也存在着许多区别。本文将详细介绍数组、链表、队列、栈的区别和联系。 一、数组和...
本篇文章将深入探讨如何用数组和链表两种数据结构来实现队列。 ### 数组实现队列 数组实现队列的优势在于访问速度快,因为数组是连续存储的,可以通过下标直接访问元素。但数组的大小是固定的,所以在创建时需要...
"go语言通过数组和链表的方式实现队列" 从给定的文件信息中,我们可以生成以下知识点: 1.队列的定义:队列是一种特殊的线性表,只能在队列的尾部添加元素,在队列的头部删除元素,先进先出(FIFO)。 2.go语言中...
数组、链表、堆栈和队列、线性表和顺序表 数组、链表、堆栈和队列是最基本的数据结构,任何程序都会涉及到其中的一种或多种。数据结构是指数据之间的相互关系,即组织形式,有逻辑结构和物理结构之分。逻辑结构有...
队列可以使用多种方式实现,包括链表和数组。本文将深入探讨两种队列实现方式:循环链表队列和循环数组队列,并通过代码示例进行详细解析。 #### 循环链表队列 循环链表队列是一种使用链表实现的队列,其中最后一...
数组、链表、队列、栈数据结构特点,各自优点和缺点 在计算机科学中,数据结构是指用于组织和存储数据的方式。常见的数据结构包括数组、链表、队列、栈等。每种数据结构都有其特点、优点和缺点,本文将对这些数据...
在队列的代码中,引用了链表的代码
- **链表的优势**:适合需要频繁进行插入和删除操作的应用场景,如任务队列管理等。 - **链表的劣势**:查询效率低,不适合需要频繁查询数据的场景。 #### 关于顺序表的改进 对于基于数组的顺序表,可以通过引入...
常见的数据结构(栈、队列、数组、链表和红黑树) 数组和链表.pdf
- 链表:如单向链表、双向链表和循环链表等。 - 栈:一种后进先出(LIFO)的数据结构,用于表达式求值、函数调用栈等。 #### 二、非线性结构 非线性结构指的是数据元素间的关系不是简单的线性关系,而是更复杂的...
链表还适用于实现某些特定的数据结构,如堆栈、队列和图形数据结构。 在编程语言中,数组通常被内置支持,易于理解和使用,而链表则通常需要通过指针和结构体等概念来实现,相对复杂。但考虑到其灵活性,链表在处理...
链表实现的循环队列在处理满队列和空队列时与数组实现有所不同,因为链表的节点可以动态增加和删除,所以无需像数组那样进行特殊的重置操作。 在C++中,模板(template)是泛型编程的重要工具,它可以让我们创建...
为了优化算法,还可以使用栈或队列来辅助处理,例如,将被淘汰的节点放入栈中,以避免在主循环中频繁修改链表结构。 总的来说,约瑟夫环问题的解决体现了数据结构和算法的巧妙结合,它不仅考察了基本的数据结构操作...
在 Java 中,LinkedList 的内部使用双端链表队列原理实现,而 ArrayList 的内部使用双端数组队列原理实现。 Java 实现自定义双端队列可以通过链表和数组两种方式实现,双端队列可以充当单端队列,也可以用于充当栈...
在实际应用中,数组形链表适用于那些元素数量不确定且可能频繁增删的情况,如数据缓存、动态任务队列等。通过合理设计和优化,数组形链表可以在保持高效访问的同时,提供足够的灵活性。 总结来说,C语言的数组形...
- **链表适合**:如果需要频繁地插入和删除元素,或者数据的大小需要动态调整,而对随机访问要求不高的情况下,链表更为合适,例如实现LRU缓存淘汰策略、实现队列和栈等。 总的来说,选择数组还是链表取决于具体的...