java链表和队列的区别,编写实现队列的例程,使用数组和链表

  java链表和队列的区别,编写实现队列的例程,使用数组和链表

  队列的介绍

  队列是一种先进先出(先进先出)的线性的数据结构,队列的主要操作为入队和出队。

  队头:队列的出口端,队尾:队列的入口端,通常在数组中表示为最后入队元素的下一个位置。

  在用数组实现时,注意:若队头不断有元素出队,那么队列的可用空间就会变小,所以我们通常用循环队列来实现,此时队尾也可能出现在队头的前面。

  相关学习视频教程推荐:java学习

  队列的数组实现

  队列的数组实现这里的队列一般都是循环队列!

  特别注意:

  (1)队列满时的判断条件为(队尾下标+1) % 数组长度 = 队头下标

  (2)队尾指针指向的位置空出一位,因此队列最大容量比数组长度小1。

  公共类我的队列{

  私有int[]数组;

  私有int front

  私人内部后部

  公共MyQueue(int容量){

  array=new int[capacity];

  }

  /*

  入队时,只需判断队列是否已满,若队列已满,则抛出异常,其他情况(包括队列为空)都正常插入

  */

  公共空的入队(整数数据)引发异常{

  if((rear 1) % array.length==front)

  抛出新异常(队列已满,不能入队!);

  array[rear]=data;

  后方=(后方1)%数组。长度;

  }

  /*

  出队时,判断队列是否为空,若队列为空,抛出异常

  */

  public int出列()引发异常{

  如果(前==后)

  抛出新异常(队列为空,不能出队!);

  int temp=array[front];

  front=(front 1)% array。长度;

  返回温度;

  }

  //public void output(){

  //for(int I=front;((I ^ 1)%数组。长度)=后方;i ){

  //一直在循环输出,严重错误!不能把取模判断语句写在条件里面!

  //I %=数组。长度;

  //系统。出去。println(array[I]);

  //}

  //}

  公共空的输出(){

  for(int I=front;我!=后方;I=(I ^ 1)%数组。长度){

  系统。出去。println(array[I]);

  }

  }

  公共静态void main(String[] args)引发异常{

  我的队列我的队列=新的我的队列(5);//长度为5的队列只能插入四个元素

  我的队列。入队(1);

  我的队列。入队(3);

  我的队列。入队(2);

  我的队列。入队(4);

  我的队列。dequeue();

  我的队列。dequeue();

  我的队列。入队(5);

  我的队列。入队(6);

  我的队列。output();

  }

  }队列的链表实现

  队列用链表实现时,用头指针指向队列的第一个节点,用尾指针指向队列的最后一个节点。

  公共类MyQueue_LinkList {

  私有静态类节点{

  (同Internationalorganizations)国际组织数据;

  下一个节点;

  节点(整数数据){

  this.data=数据

  }

  }

  私有节点前端;

  私有节点后方;

  私有(同Internationalorganizations)国际组织大小;//队列中实际元素的个数

  private int maxsize

  public my queue _ LinkList(int capacity){

  maxsize=容量;

  }

  公共空的入队(整数数据)引发异常{

  if(size=maxsize)

  抛出新异常(队列已满,无法入队);

  插入的节点节点=新节点(数据);

  if(size==0){

  front=插入的节点

  rear=插入的节点

  }

  否则{

  rear.next=插入的节点

  rear=插入的节点

  }

  尺寸;

  }

  public int出列()引发异常{

  if(front==null)

  抛出新异常(队列为空,无法出队!);

  内部温度;

  如果(前==后)//队列中只有一个节点

  后方=空;

  temp=front.data

  front=front .下一个

  尺寸-;

  返回温度;

  }

  公共空的输出(){

  节点温度=前端;

  for(int I=0;我尺寸;i ){

  系统。出去。打印(温度数据);

  temp=temp.next

  }

  }

  公共静态void main(String[] args)引发异常{

  my queue _ LinkList my queue _ LinkList=new my queue _ LinkList(5);

  我的队列_链表。入队(1);

  我的队列_链表。入队(3);

  我的队列_链表。入队(2);

  我的队列_链表。dequeue();

  my queue _ linklist . dequeue();

  my queue _ linklist . enqueue(5);

  my queue _ linklist . enqueue(7);

  my queue _ linklist . output();

  }

  }队列的应用场景

  (1)银行排队,先到先得。

  (2)多线程中,公平锁的等待队列是根据访问顺序来确定队列中线程的顺序。

  (3)网络爬虫实现网站爬取,即将待爬取网站的URL存储在队列中,然后按照在队列中存储的顺序依次爬取并分析。

  相关文章及教程推荐:java入门教程以上是队列数组和链表在java中的实现细节。更多请关注我们的其他相关文章!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: