导航:首页 > 编程语言 > 环形队列java

环形队列java

发布时间:2022-05-04 04:20:34

java循环对列怎么跳着出队

没明白什么意思,是队列中的元素,隔一个出队列吗?这样的话可以用两个队列,对象先装进一个队列A,之后for遍历的时候 奇数项 拿出来 ,偶数项 放入另一个队列B,第一个队列A遍历完,将队列A当成队列B 队列B当成队列A,重复以上。其他间隔也可以自己写方法。

② 用java实现循环队列

简单写了下,希望你能看明白

import java.util.ArrayList;

public class SeqQueue {

ArrayList<String> list;

public SeqQueue() {
list = new ArrayList<String>();
}

public String getFirst() {
if (!list.isEmpty()) {
String s = list.get(0);
list.remove(0);
return s;
}
return null;
}

public void insertLast(String s) {
list.add(s);
}

public static void main(String[] args) {
SeqQueue seq = new SeqQueue();
seq.insertLast("111");
seq.insertLast("222");
seq.insertLast("333");
System.out.println(seq.getFirst());
System.out.println(seq.getFirst());
System.out.println(seq.getFirst());
}

}

③ 用java语言设计顺序循环队列类

代码如下:

importjava.io.Serializable;
importjava.util.Arrays;

publicclassLoopQueue<T>implementsSerializable{
/**
*@FieldsserialVersionUID:TODO
*/
=-3670496550272478781L;

privateintDEFAULT_SIZE=10;

privateintcapacity;//保存数组的长度

privateObject[]elementData;//定义一个数组用于保存循环队列的元素

privateintfront=0;//队头

privateintrear=0;//队尾

//以默认数组长度创建空循环队列
publicLoopQueue(){
capacity=DEFAULT_SIZE;
elementData=newObject[capacity];
}

//以一个初始化元素来创建循环队列
publicLoopQueue(Telement){
this();
elementData[0]=element;
rear++;
}

/**
*以指定长度的数组来创建循环队列
*
*@paramelement
*指定循环队列中第一个元素
*@paraminitSize
*指定循环队列底层数组的长度
*/
publicLoopQueue(Telement,intinitSize){
this.capacity=initSize;
elementData=newObject[capacity];
elementData[0]=element;
rear++;
}

//获取循环队列的大小
publicintsize(){
if(isEmpty()){
return0;
}
returnrear>front?rear-front:capacity-(front-rear);
}

//插入队列
publicvoidadd(Telement){
if(rear==front&&elementData[front]!=null){
("队列已满的异常");
}
elementData[rear++]=element;
//如果rear已经到头,那就转头
rear=rear==capacity?0:rear;
}

//移除队列
publicTremove(){
if(isEmpty()){
("空队列异常");
}
//保留队列的rear端的元素的值
ToldValue=(T)elementData[front];
//释放队列的rear端的元素
elementData[front++]=null;
//如果front已经到头,那就转头
front=front==capacity?0:front;
returnoldValue;
}

//返回队列顶元素,但不删除队列顶元素
publicTelement(){
if(isEmpty()){
("空队列异常");
}
return(T)elementData[front];
}

//判断循环队列是否为空队列
publicbooleanisEmpty(){
//rear==front且rear处的元素为null
returnrear==front&&elementData[rear]==null;
}

//清空循环队列
publicvoidclear(){
//将底层数组所有元素赋为null
Arrays.fill(elementData,null);
front=0;
rear=0;
}

publicStringtoString(){
if(isEmpty()){
return"[]";
}else{
//如果front<rear,有效元素就是front到rear之间的元素
if(front<rear){
StringBuildersb=newStringBuilder("[");
for(inti=front;i<rear;i++){
sb.append(elementData[i].toString()+",");
}
intlen=sb.length();
returnsb.delete(len-2,len).append("]").toString();
}
//如果front>=rear,有效元素为front->capacity之间、0->front之间的
else{
StringBuildersb=newStringBuilder("[");
for(inti=front;i<capacity;i++){
sb.append(elementData[i].toString()+",");
}
for(inti=0;i<rear;i++){
sb.append(elementData[i].toString()+",");
}
intlen=sb.length();
returnsb.delete(len-2,len).append("]").toString();
}
}
}

publicstaticvoidmain(String[]args){
LoopQueue<String>queue=newLoopQueue<String>("aaaa",3);
//添加两个元素
queue.add("bbbb");
queue.add("cccc");
//此时队列已满
System.out.println(queue);
//删除一个元素后,队列可以再多加一个元素
queue.remove();
System.out.println("删除一个元素后的队列:"+queue);
//再次添加一个元素,此时队列又满
queue.add("dddd");
System.out.println(queue);
System.out.println("队列满时的长度:"+queue.size());
//删除一个元素后,队列可以再多加一个元素
queue.remove();
//再次加入一个元素,此时队列又满
queue.add("eeee");
System.out.println(queue);
}
}

④ Java如何实现一个循环队列保存另一个类的对象

这里说下我的思路。循环队列。首先你要想清楚队列。队列有多种实现方式。链表和数组。
如果是固定的个数那可以用数组实现否则用双向循环链表实现。 具体说实现方式可以参考link list或arrayDequeue

⑤ java中的arraydeque是循环队列吗

ArrayDeque的实现Java中的双端队列是用数组实现的,是循环队列。

⑥ Java如何使用数组实现循环队列的案例

class Element{
int id;
String name;
Element(int a,String n){
id=a;name=n;
}
}

class SeqQueue{
int first,last,maxsize;
Element queue[];
SeqQueue(int i){
maxsize=i;
first=last=-1;
queue=new Element[i];
}

public void clear(){//置空
first=last=-1;
}

public boolean isEmpty(){//判空
if(first==-1)return true;
else return false;
}

public Element getFirst(){//取队列头元素
if(first==-1)return null;
else return queue[first+1];
}

public boolean isFull(){//判满
if((last+1)%maxsize==first)return true;
else return false;
}

public boolean enQueue(Element e){//入队
if(this.isFull())return false;
if(this.isEmpty())
first=last=0;
else
last=(last+1)%maxsize;
queue[last]=e;
return true;
}

public Element deQueue(){//出队
Element t=queue[first];
if(this.isEmpty())return null;
if(first==last){
queue[first]=null;
this.clear();
return t;
}
queue[first]=null;
first=(first+1)%maxsize;
return t;
}

public int getLength(){//队列长度
if(last>=first)return last-first+1;
else return maxsize-(first-last)+1;
}

public void display(){//打印所有元素
int i,j;
for (i=first,j=0;j<this.getLength();i=(i+1)%maxsize,j++)
System.out.println(queue[i].id);
}
}

⑦ java中,实现一个循环队列,其中的边界条件有些弄不明白,请看我的代码:

//我做了一个测试类,你运行一下试试吧
//问题的关键在于这个类的设计似乎是,假设size是3,但是数组的size是4
//putloc是0,但是put的位置在数组中是1
//总觉得这个类的设计很怪,既然size是3,底层实现也做成3就好了。

import java.util.Arrays;

public class CircularQueue {
private char q[];
private int putloc, getloc;

public static void main(String[] args) {
CircularQueue circularQueue = new CircularQueue(3);
circularQueue.put('1');
circularQueue.put('1');
circularQueue.put('1');
circularQueue.put('1');
}

private void paint(String s) {
System.out.println(s + ": putloc=" + putloc + " getloc=" + getloc + " "
+ Arrays.toString(q));
}

public CircularQueue(int size) {
q = new char[size + 1];// 注意:这里数组长度加 1。
putloc = getloc = 0;
paint("create!");
System.out.println();
}

public void put(char ch) {
paint("before put");
if (putloc + 1 == getloc | ((putloc == q.length - 1) & (getloc == 0))) { // 第一个边界条件想不清楚,为什么putloc+1==getloc
System.out.println("--Queue is full.");
return;
}
putloc++;
if (putloc == q.length)
putloc = 0;
q[putloc] = ch;
paint("after put");
System.out.println();
}

public char get() {
paint("before get");
if (getloc == putloc) {
System.out.println("--Queue is empty.");
return (char) 0;
}
getloc++;
if (getloc == q.length)
getloc = 0;
paint("after get");
System.out.println();
return q[getloc];
}
}

⑧ java环形队列

根据java环形队列问题编写的程序如下:
import java.util.ArrayList;
import java.util.List;

public class F {
static boolean isPrime(int a){
int i;
for(i=2;i<a;i++){
if(a%i==0){
break;
}
}
if(i==a){
return true;
}else{
return false;
}
}
public static void main(String[] args) {
List l=new ArrayList();
for(int i=2;i<=300;i++){
if (isPrime(i)){
l.add(i);
}
}
List m=new ArrayList();
for(int i=0;i<l.size();i++){
m.add(l.get(i));
}
int point=0,number=1;
while(l.size()>1){
if(number%3==0){
l.remove(point);
--point;
}
++point;
++number;
if(point>l.size()-1){
point=0;
}
}
int position=m.indexOf(l.get(0));
System.out.println("最后剩下的数为:"+l.get(0));
System.out.println("它的编号为: "+(position+1));
}
}
运行结果:
最后剩下的数为:211
它的编号为: 47

⑨ java里面,说到循环队列的存储空间为Q(1:35)包含什么含义,如果front=1,front=

如果是正数就不用加35了,如果是负数才要加35

这一题明显是个小陷阱,开始时候front=rear ,结束了还是front=rear 说明进来的和出去的一样多啊,你看 如果这是进来一个元素rear就加1,变成rear=1(因为是1:35啊,就是说元素只能排在1-35之间,35排完了就满了吗,没有 35排完了如果再进来元素就该排在1的位置上了。而不是36,这你得明白)

好了 进来一个rear加1 出去一个呢,front加1 就这样进来出去,进来出去,到最后front和rear还是相等的,那不就说明进来和出去的一样多嘛。 这样一来最后的元素就和原来的元素一样多了,明显不是0就是35,因为要么队空(0个元素),要么队满(35个元素)

%是求余数用的 10%3=1,就是这个意思 那个公式就是纯粹数学公式,和编程,语言都没关系。
这种题你画一张图最好理解了,当然短一点最好,弄个队列长度为6的,自己动动手,出对入队的画画就全明白了

阅读全文

与环形队列java相关的资料

热点内容
fibonacci数列算法 浏览:775
产品经理要和程序员吵架吗 浏览:252
grub2命令行 浏览:618
无法获取加密卡信息 浏览:774
云服务器网卡充值 浏览:509
编程就是软件 浏览:49
服务器如何添加权限 浏览:437
引用指针编程 浏览:851
手机加密日记本苹果版下载 浏览:63
命令行括号 浏览:176
java程序升级 浏览:490
排序算法之插入类 浏览:227
gcccreate命令 浏览:73
海尔监控用什么app 浏览:64
系统盘被压缩开不了机 浏览:984
linuxredis30 浏览:541
狸窝pdf转换器 浏览:696
ajax调用java后台 浏览:905
活塞式压缩机常见故障 浏览:614
break算法 浏览:731