java从队头到队尾_java数据结构----队列,优先级队列

1.队列:和栈中的情况不同,队列中的数据项不总是从数组下标0开始,移除一个数据项后,队头指针会指向下标较高的数据项,其特点:先入先出

2.图解

20180212191709810984.png

3.队列的实现代码:

3.1.Queue.java

1 packagecom.cn.queue;2 /**

3 * 数据结构之队列实现4 *@authorAdministrator5 *6 */

7 public classQueue {8 private intmaxsize;9 private long[] queuearray;10 private intfront;11 private intrear;12 private intnItems;13 public Queue(ints){14 maxsize =s;15 queuearray = new long[maxsize];16 front = 0;17 rear = -1;18 nItems = 0;19 }20 public void insert(longj){21 if (rear == maxsize - 1)22 rear = -1;23 queuearray[++ rear] =j;24 nItems ++;25 }26 public longremove(){27 long temp = queuearray[front ++];28 if (front ==maxsize)29 front = 0;30 nItems --;31 returntemp;32 }33 public longpeekFront(){34 returnqueuearray[front];35 }36 public booleanisEmpty(){37 return (nItems == 0);38 }39 public booleanisFull(){40 return (nItems ==maxsize);41 }42 public intsize(){43 returnnItems;44 }45

46 }

3.2.QueueTest.java

1 packagecom.cn.queue;2

3 public classQueueTest {4 public static voidmain(String[] args) {5 Queue q = new Queue(100);6 q.insert(100);7 q.insert(200);8 q.insert(300);9 while (q.size()!=0){10 System.out.print(q.remove()+" ");11 }12 System.out.println("");13 System.out.println(q.isEmpty());14 }15 }

4.队列插入和删除的时间复杂度和栈的一样,都是O(1)

5.优先级队列:优先级队列是比栈和队列更加专用的数据结构,他有一个队头和队尾,并且也是从队头移除数据项,不过在优先级队列中,数据项按关键字的值有序,这样关键字最小的数据项总是在队头,而最大的就在队尾。做插入操作时会按照顺序插入到合适的位置以确保队列的顺序。除了可以快速访问最小关键值的数据项,优先队列还必须实现非常快的插入数据项,由此,优先级队列通常使用一种称为堆得数据结构实现。本程序暂时使用数组实现,该实现的插入比较慢,适用于数据量小,并且对速度要求并不高场景。

6.优先级队列的实现:

6.1.PriorityQ.java

1 packagecom.cn.queue;2 /**

3 * 优先级队列的实现代码4 *@authorAdministrator5 *6 */

7 public classPriorityQ {8 private intmaxsize;9 private long[] queuearray;10 private intnItems;11 public PriorityQ(ints){12 maxsize =s;13 queuearray = new long[maxsize];14 nItems = 0;15 }16 public void insert(longitem){17 intk;18 if (nItems == 0)19 queuearray[nItems ++] =item;20 else{21 for(k = nItems - 1;k >= 0;k --){22 if (item >queuearray[k])23 queuearray[k + 1] =queuearray[k];24 else

25 break;26 }27 queuearray[k + 1] =item;28 nItems ++;29 }30 }31 public longremove(){32 return queuearray[--nItems];33 }34 public longpeekmin(){35 return queuearray[nItems - 1];36 }37 public booleanisEmpty(){38 return (nItems == 0);39 }40 public booleanisFull(){41 return (nItems ==maxsize);42 }43 }

6.2图解

20180212191710185998.png

7.优先级队列的效率:插入操作时间复杂度位O(N),删除操作时间复杂度为O(1),后续堆数据结构将改进他。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值