java算法,队列为空和已满?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java算法,队列为空和已满?相关的知识,希望对你有一定的参考价值。

下面代码中,为空和已满,什么意思?为什么那么表示?
public class Queue

private int maxSize;
private long[] queArray;
private int front;
private int rear;

public Queue(int s)

maxSize=s+1;
queArray=new long[maxSize];
front=0;
rear=-1;



public void insert(long j)
if(rear==(maxSize-1))
rear=-1;
queArray[++rear]=j;



public long remove()
if(front==maxSize-1)
front=0;
return queArray[front++];


public long peek()
return queArray[front];


public boolean isEmpty()
return (rear+1==front)||(front+maxSize-1==rear);


public boolean isFull()
return (rear+2==front)||(front+maxSize-2==rear);;


public int size()
return nItems;



ps:我想问问,怎么保持始终有一个为空,插入时,不都插进去了吗?也没有空值呀!

参考技术A 这个是一个用数组模拟队列的做法.
队列有个特点,先进先出.
front和rear可以看到两个标记 fornt 是指最选进入的那个,rear是指最后入队的那个
当 最后一个=最前一个那就是空
当最后一个的下一个=最前一个那就是满了,这很好理解呀,后面两个条件,你可以自己去推一下
还有疑问 shmilyhe@163.com
blog.csdn.net/shmilyhe
参考技术B
Size fornt rear
9 0 -1
| |
--------------------
| |
--------------------

有数据:
Size fornt(rear)
9 0
| |
--------------------
| *
--------------------

有数据:
Size rear fornt
9 2 0
| | |
--------------------
| * * *
--------------------

满:
Size(rear) fornt
9 0
| |
--------------------
|* * * * * * * * * *
--------------------
参考技术C ==========================应你所邀前来作答============================
显然这是个循环队列。循环队列除了普通队列的FIFO特点以外,还有已经出队列后空闲的空间可以再次利用存储后续数据。
但因为有这个特点,根据进队列和出队列的次序,会产生这样的情况:队列空时和队列满时,队列首尾指针rear、front情况完全相同。所以,无法直接判断队列空还是满。
解决方法有两种:
一种是额外设置一个booean型变量,标识是否是空。
进队列时,将它置为true。出队列时,如发生上面指针情况,将它置false。
那么检查队列空或满就是对这个辅助变量与指针情况共同判断。
另一种方法是永远保留一个空闲位置。这样空和满的时候,两个指针的情况就不一样了。
你的这个程序是后一种处理方式。
至于将指针情况定义为什么关系表示空满,各人有各人的方法。
看一下我做的循环队列类,稍有变化。
public class Quque
private capacity,front,rear;
private long[] data;
public Queue(int size)
capacity=size+1;
data=new long[capacity];
front=rear=0;

public void enQueue(long value)
if((rear+1)%capacity==front)
throw new Exception("队列满");

data[rear++]=value;
rear%=capacity;

public long deQueue()
if(rear==front)
throw new Exception("队列空");

long value=data[front++];
front%=capacity;
return value;

public long peek()
if(rear==front)
throw new Exception("队列空");

return data[front];

public boolean isEmpty()
return rear==front;

public boolean isFull()
return (rear+1)%capacity==front;

public int getCapacity()
return capacity-1;

public int getSize()
return (rear+capacity-front)%capacity-1;

本回答被提问者采纳
参考技术D 没看出来吗,这是一个环形对列。-1与maxSize-1是重合的.

python 队列

一、分类

1、Queue()

# Queue 先进先出
import queue
q = queue.Queue()
q.put(a)      # 向队列里添加数据,若队列已满,则阻塞
q.put_nowait(c)   # 添加数据,若队列已满,则报错
q.get()     # 从队列里取数据,若队列为空,则阻塞
q.get_nowait()  # 从队列里取数据。若队列为空。则报错
q.empty()   # 判断队列是否为空
q.full()    # 判断队列是否满

2、LifoQueue()

import queue
# 先进后出
# 方法一样
q = queue.LifoQueue()
q.get()
q.put()
q.get_nowait()
q.put_nowait()
q.empty()
q.full()

3、PriorityQueue()

import queue
# 按优先级取值,put的是tuple,第一个元素是顺序,若不是数字,则安装编码比较
q = queue.PriorityQueue()
q.put((10, q))
q.put((5, a))
print(q.get())
# 结果:(5, ‘a‘)

 

以上是关于java算法,队列为空和已满?的主要内容,如果未能解决你的问题,请参考以下文章

Java队列的部分调用方法

以标志变量flag作为判断循环队列空或满的依据,写出循环队列中插入和删除的算法。

毕业了-java二叉树层次遍历算法

Java数据结构及算法实战系列008:Java队列02——阻塞队列BlockingQueue

Java数据结构及算法实战系列008:Java队列02——阻塞队列BlockingQueue

java数据结构与算法之二叉树深度优先和广度优先遍历