当前位置:首页 » 编程语言 » java数据结构队列

java数据结构队列

发布时间: 2022-07-18 08:41:00

‘壹’ java数据结构之何为队列

java是一门面向对象的语言,但是也要用到数据结构的,比如让你求个迷宫出口

‘贰’ 高手请帮忙用java版的数据结构,设置3个队列,实现入队出队。

import java.util.ArrayList;

/**
*
* @author 狱韬
*/
public class SnakeBody {
private int size=0; //队列的长度
private int cursor=-1; //指针
private ArrayList<int[]> list=null; //存储

public SnakeBody() {
list=new ArrayList<int[]>(); //存储器
}

//返回底部的数据
public int[] getLast(){
return list.get(list.size()-1);
}

//返回顶部的数据
public int[] getFirst(){
return list.get(0);
}

//压入数据
public void put(int[] arry){
list.add(arry);
}

//删除底部数据
public void removeLast(){
list.remove(list.size()-1);
}

//重置
public void reSet(){
list=new ArrayList<int[]>(); //存储器
}

//删除顶部数据
public void removeFirst(){
list.remove(0);
}

//返回数据长度
public int size(){
return list.size();
}

public static void main(String[] args) {
SnakeBody data = new SnakeBody();
for(int i=0;i<10;i++){
data.put(new int[]{0,i});
}
System.out.println(data.getFirst()[0]+"-------"+data.getFirst()[1]);
System.out.println(data.getLast()[0]+"-------"+data.getLast()[1]);
data.removeLast();
System.out.println(data.getFirst()[0]+"-------"+data.getFirst()[1]);
System.out.println(data.getLast()[0]+"-------"+data.getLast()[1]);
}
}

‘叁’ java常用的几种数据结构,堆栈,队列,数组,链

下面给你简单介绍:堆栈,队列,数组,链表

堆栈

采用该结构的集合,对元素的存取有如下的特点:

先进后出(即,存进去的元素,要在后它后面的元素依次取出后,才能取出该元素)。例如,子弹压进弹夹,先压进去的子弹在下面,后压进去的子弹在上面,当开枪时,先弹出上面的子弹,然后才能弹出下面的子弹。

栈的入口、出口的都是栈的顶端位置

压栈:就是存元素。即,把元素存储到栈的顶端位置,栈中已有元素依次向栈底方向移动一个位置。

弹栈:就是取元素。即,把栈的顶端位置元素取出,栈中已有元素依次向栈顶方向移动一个位置。

队列

采用该结构的集合,对元素的存取有如下的特点:

先进先出(即,存进去的元素,要在后它前面的元素依次取出后,才能取出该元素)。例如,安检。排成一列,每个人依次检查,只有前面的人全部检查完毕后,才能排到当前的人进行检查。队列的入口、出口各占一侧。

数组

采用该结构的集合,对元素的存取有如下的特点:

查找快:通过索引,可以快速访问指定位置的元素

增删慢:

指定索引位置增加元素:需要创建一个新数组,将指定新元素存储在指定索引位置,再把原数组元素根据索引,复制到新数组对应索引的位置。

链表

采用该结构的集合,对元素的存取有如下的特点:

多个节点之间,通过地址进行连接。例如,多个人手拉手,每个人使用自己的右手拉住下个人的左手,依次类推,这样多个人就连在一起了。

节点:两个部分:数据域(存储的数值),指针域(存储地址)

查找慢:想查找某个元素,需要通过连接的节点,依次向后查找指定元素

增删快:

增加元素:操作如左图,只需要修改连接下个元素的地址即可。

删除元素:操作如右图,只需要修改连接下个元素的地址即可。

‘肆’ java中的“queue类”是什么,有什么作用

java中的queue类是队列数据结构管理类。在它里边的元素可以按照添加它们的相同顺序被移除。
队列通常(但并非一定)以 FIFO(先进先出)的方式排序各个元素。不过优先级队列和 LIFO 队列(或堆栈)例外,前者根据提供的比较器或元素的自然顺序对元素进行排序,后者按 LIFO(后进先出)的方式对元素进行排序。无论使用哪种排序方式,队列的头都是调用remove()或poll()所移除的元素。在 FIFO 队列中,所有的新元素都插入队列的末尾。其他种类的队列可能使用不同的元素放置规则。每个Queue实现必须指定其顺序属性。

offer 添加一个元素并返回true 如果队列已满,则返回false
poll 移除并返问队列头部的元素 如果队列为空,则返回null
peek 返回队列头部的元素 如果队列为空,则返回null
put 添加一个元素 如果队列满,则阻塞
take 移除并返回队列头部的元素 如果队列为空,则阻塞
element 返回队列头部的元素 如果队列为空,则抛出一个NoSuchElementException异常

add 增加一个元索 如果队列已满,则抛出一个IIIegaISlabEepeplian异常
remove 移除并返回队列头部的元素 如果队列为空,则抛出一个
NoSuchElementException异常

注意:poll和peek方法出错进返回null。因此,向队列中插入null值是不合法的。

还有带超时的offer和poll方法重载,例如,下面的调用:
boolean success = q.offer(x,100,TimeUnit.MILLISECONDS);
尝试在100毫秒内向队列尾部插入一个元素。如果成功,立即返回true;否则,当到达超时进,返回false。同样地,调用:
Object head = q.poll(100, TimeUnit.MILLISECONDS);
如果在100毫秒内成功地移除了队列头元素,则立即返回头元素;否则在到达超时时,返回null。
阻塞操作有put和take。put方法在队列满时阻塞,take方法在队列空时阻塞。

Queue接口与List、Set同一级别,都是继承了Collection接口。LinkedList实现了Queue接 口。Queue接口窄化了对LinkedList的方法的访问权限(即在方法中的参数类型如果是Queue时,就完全只能访问Queue接口所定义的方法 了,而不能直接访问 LinkedList的非Queue的方法),以使得只有恰当的方法才可以使用。BlockingQueue 继承了Queue接口。

‘伍’ java 新手 数据结构中 数组 ,栈 ,队列, 链表, 树 ,图 , 堆, 散列表 他们之间存在那种关系啊

他们都是一种存储数据的方式而已,打个比方,你坐地铁1号线上班和2号线上班,都能上班只是路线不一样,他们都是存储数据的格式,每种数据结构有自己的特点,使用哪种数据格式需要根据具体的需求来选,比如你现在需要有序的存储一组数据而且还要经常的查询数据,那么数组就是最合适的,他有角标可以很容易进行排序和查询!如果有序但是经常增删数据,那么链表就是最合适的,他的增删很快,但是查询差。每种数据结构有各自的适用条件,根据需求来选择具体的数据结构,时间久了不需要记忆你都会用了

‘陆’ 数据结构:关于Java实现的一个队列,对其中的扩容步骤有疑问答题的都是我爹

这确实有点奇葩,要么修改resize方法,在进行复制的时候,先判断一下front和rear的值,如果front不为0,说明进行过出队列操作,再判断rear与front的值:

if(front<rear){//fromfronttorear这样就可以去除多余的空位置,让front从0开始}
if(front>rear){
//先复制后半段到新的数组,然后复制前半段到新数组的后面,这就保证0位置的就是队列的头
}

这样的话,就可以理解为什么resize之后将front置为0,。

不知道这样的解释对不对,我看完上面的代码觉得就是这样的。

‘柒’ 在Java数据结构中的布线问题,用队列和栈都可以找到解,但是队列可以找到最优解,栈不一定能,分析其原因

因为队列实际上进行的是广度优先,求得的是最短距离,也就是最优解
如果用栈得到的一般都不能保证是最短距离,自然也不一定是最优解了

‘捌’ 简述队列和栈的不同,以及在java语言中如何实现这两个数据结构

队列形似一水管左右都互通,所以先进入的数据从另一头先出来。栈形似一个水杯,先进去的肯定被压在最下面。后进去的肯定在最上面。所以先进去肯定后最后出来。后进去的肯定最先出来。理解这个。你去看相关的代码没问题!

‘玖’ java版数据结构如何创建一个循环队列

public class CircleQueue<T> {
private int maxSize;
private int head;//头部出 始终指向即将被取出的下标
private int tail;//尾部进 始终指向即将赋值的下标
private int size;
//tail和head在队列为空或为满的时候重合,用size是否为0来区分
private Object[] array;
public CircleQueue(int maxSize){
this.maxSize=maxSize;
array=new Object[this.maxSize];
}
public synchronized boolean put(T t){
if(size<maxSize){
array[tail]=t;
tail=(tail+1)%maxSize;
size++;
return true;
}else{
return false;
}
}

public synchronized T take(){
if(size>0){
T t=(T) array[head];
head=(head+1)%maxSize;
size--;
return t;
}else{
return null;
}

}
public int size(){
return size;
}
}

‘拾’ java 数据结构 队列的基本应用 合并,复制,检查是否相同

楼主,你先把Queue 的方法实现,我们才知道怎么搞!题目的意思估计就是说要通过这几个方法来实现下面的功能,但你这几个方法的什么信息都没给,实在没办法解答!

热点内容
青骄如何重置账号密码 发布:2025-02-01 09:57:51 浏览:520
阿里云服务器镜像市场 发布:2025-02-01 09:46:04 浏览:525
任子行服务器管理口默认地址 发布:2025-02-01 09:42:58 浏览:996
设备作为FTP客户端时 发布:2025-02-01 09:35:07 浏览:936
安卓如何登录ios明日之后 发布:2025-02-01 09:31:59 浏览:306
怎么查看手机存储卡 发布:2025-02-01 09:31:51 浏览:341
java知识点总结 发布:2025-02-01 09:08:32 浏览:685
如何在手机版给服务器加光影 发布:2025-02-01 09:02:14 浏览:728
简单神器安卓系统的哪个好 发布:2025-02-01 09:00:48 浏览:355
社保卡密码如何异地改密码 发布:2025-02-01 08:57:22 浏览:33