java实现队列的详细代码

Wesley13
• 阅读 457

一、什么是队列结构

一种线性结构,具有特殊的运算法则【只能在一端(队头)删除,在另一端(队尾)插入】。

分类:

  1. 顺序队列结构
  2. 链式队列结构

基本操作:

  1. 入队列
  2. 出队列

   二:准备数据

static final  int QUEUELEN=15;

class DATA{

           String name;

           int age;

           }

class SQType{

              DATA  date[]=new DATA[QUEUELEN];

              int head;

              int tail;

                }

在类SQType中data为数据元素,head为队头序号,tail为队尾序号,当head为0时队为空,当tail为QUEUELEN时表示队列已满。

三:初始化队列

在使用队列前首先要创建个空队列,即初始化队列。

  1. 按符号常量QUEUELEN指定的大小申请一片内存空间用来保存对列中的数据。
  2. 设置head=0和tail=0,表示一个空队列。

SQType  SQTypeInit(){

                 SQType q;

                  if((q=new  SQType())!=null){

                              q.head=0;

                              q.tail=0;

                               return q;

                              }

else{

    return null;

             }

}

四:判断空队列

int SQTypeIsEmpty(SQType q){

                int temp=0;

                 if(q.head=q.tail){

                       temp=1;

                          }

          return temp;    

              }

//判断队列是否满了

int SQTypeIsNull(SQType q){

               int temp=0;

               if(q.head=QUEUELEN){

                        temp=1;

                       }

                return temp;

              }

//清空队列

void SQTypeClear(SQType q){

               q.head=0;

                q.tail =0;

                }

//释放空间

void SQTypeFree(SQType q){

              if(q!=null){

                  q=null;   

                }

}

//入队列

int IntSQType(SQType q,DATA data){

                 if(SQTypeIsEmpty(q)==1){

                     System.out.println("队列已满,操作失败");

                           return 0;

                      }

else{

q.data[q.tail++]=data;

 return 1;

     }

}

//出队列

DATA OutSQType(SQType q){

          if(SQTypeIsEmpty(q)==1){

                            System.out.println("队列为空");

                            return null;

                                }

 else{

           return q.data[q.head++];

    }

return null;

 }

//读取节点

DATA PeekSQType(SQType q){

                if(SQTypeIsEmpty(q)==1){

            System.out.println("队列为空");

            return null;

           }

   else{

                    return q.data[q.head];

            }return null;

  }

//计算队列长度

int SQTypeLen(SQType q){

        int temp;

        temp=q.tail-q.head;

        return temp;

         }

点赞
收藏
评论区
推荐文章
22 22
2年前
【数据结构之队列】详细图解!在学习队列?看这一篇就够了!
提要钩玄:本文主要介绍队列的结构、基本原理及操作,涉及到两种实现:顺序队列和链队列。1.什么是队列?先举一个日常例子,排队买饭。大家按先来后到的顺序,在窗口前排队买饭,先到先得,买完之后走开,轮到下一位买,新来的人排在队尾,不能插队。可见,上面的“队”的特点是只允许从一端进入,从另一端离开。这样的一个队,放在数据结构中就是“队列”。首先,队列是一个,所以
九路 九路
3年前
5 手写Java Stack 核心源码
Stack是Java中常用的数据结构之一,Stack具有"后进先出(LIFO)"的性质。只能在一端进行插入或者删除,即压栈与出栈栈的实现比较简单,性质也简单。可以用一个数组来实现栈结构。1.入栈的时候,只在数组尾部插入2.出栈的时候,只在数组尾部删除我们来看一下Stack的用法:如下publicstaticvoidmai
Stella981 Stella981
2年前
RokectMQ 顺序性 和分布式事务
1.顺序性是根据参数的id来使其同时投递到统一队列上。//RocketMQ通过MessageQueueSelector中实现的算法来确定消息发送到哪一个队列上//RocketMQ默认提供了两种MessageQueueSelector实现:随机/Hash//当然你可以根据业务实现自己的MessageQueueSelecto
Stella981 Stella981
2年前
C++ 优先队列priority_queue用法
头文件:include<queue操作:top访问队头empty队列是否为空size返回队列元素个数push插入元素到队尾pop弹出队头swap交换内容定义:1/2Type数据类型3Container容器类型(必须是vect
Wesley13 Wesley13
2年前
Java源码解析之LinkedList源码剖析(基于JDK1.8)
    学过数据结构的都知道双端队列(链表),没学过的也没有关系,下面我先介绍一下双端队列(链表),为什么要介绍它了,因为LinkedList本质上就是一个双端队列(链表)。一. 双端队列(链表)的介绍1. 如下图:双端队列(链表)中单个节点对应的结构!(https://oscimg.oschina.net/oscn
Wesley13 Wesley13
2年前
Java多线程之线程安全队列Queue
在Java多线程应用中,队列的使用率很高,多数生产消费模型的首选数据结构就是队列。Java提供的线程安全的Queue可以分为阻塞队列和非阻塞队列,其中阻塞队列的典型例子是BlockingQueue,非阻塞队列的典型例子是ConcurrentLinkedQueue,在实际应用中要根据实际需要选用阻塞队列或者非阻塞队列。注:什么叫线程安全?这个首先要明确。
Wesley13 Wesley13
2年前
Java并发包源码学习:CLH同步队列及同步资源获取与释放
本篇学习目标回顾CLH同步队列的结构。学习独占式资源获取和释放的流程。CLH队列的结构我在Java并发包源码学习系列:AbstractQueuedSynchronizer同步队列与Node节点已经粗略地介绍了一下CLH的结构,本篇主要解析该同步队列的相关操作,因此在这边再回顾一下:AQS通过
Stella981 Stella981
2年前
Redis发布订阅(Pub
一、redis做消息队列1\.redis存储的list数据是双向链表实现的,可以作为队列2\.使用lpush和rpop实现入队和出队3\.每次使用lpush和rpop都要发起一次连接,性能不好4\.这是一次生产,一次消费的队列二、发布/订阅模式(publish/subscribe),也是作为消息队列1\.可以一次生产
Wesley13 Wesley13
2年前
PHP优先级队列
优先级队列首先,我们要了解一下什么叫队列:队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。从定义来看,队列是无法更改顺序的线性集合。线性集合一般有几种规则:先进先出(队
菜园前端 菜园前端
10个月前
什么是队列
原文链接:什么是队列?队列是一种遵循先进先出原则的有序集合,添加新元素的一端称为队尾,另一端称为队首。实现功能在JavaScript中没有队列,但是可以通过Array实现队列的所有功能enqueue()入队dequeue()出队top()获取队首值size