算法题5 用数组实现队列
生活随笔
收集整理的這篇文章主要介紹了
算法题5 用数组实现队列
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
先定義隊列的接口
public interface IQueue<T> {/** 初始化一個空隊列*/IQueue InitQueue();/** 銷毀一個隊列*/IQueue DestroyQueue();/** 清空一個隊列*/IQueue ClearQueue();/** queue charge isEmpty()*/Boolean isEmpty();/** return queue`s length;*/Integer QueueLength();/** return the head queue*/T GetHead();/** insert the tail queue*/Boolean EnQueue(T t);/** delete the head ,or out queue*/T DeQueue(); }將隊列接口實現
public class ArrayQueue<T> implements IQueue<T> {/*** 數組型隊列* <p>* 同樣需要一個頭指針,一個尾指針 當頭指針=尾指針=0時候為空 需要實現分配一個固定大小的數組* 正常情況下下,尾指針永遠指向隊尾元素的下一個位置,比如說隊尾元素在0 尾指針則在1* <p>* 注意!:數組型隊列有很大的劣勢,容易造成存儲空間浪費,而且不易擴容。 比如說,最大空間為6的數組隊列,* 進去了6個了元素,然后從隊頭出去了5個元素,此時,仍然不能插入新的元素* 因為隊尾指針仍然指向第6個元素,其仍然占據了最后一個位置,而隊頭是不允許插入的。這樣造成前面5個位置浪費。* <p>* 解決方法:1.元素移動位置,出隊一個 后面的元素往前挪。 缺點:每次出隊都需要移動位置 很麻煩 效率也低 2.動態擴容, 缺點:浪費了前面的空間* 3.最佳解決方案:構造環形隊列*/private Integer size;private Integer header;private Integer tail;private final Integer length = 6;private Object[] arr;@Overridepublic IQueue InitQueue() {// TODO Auto-generated method stubarr = new Object[length];tail = header = size = 0;return this;}@Overridepublic IQueue DestroyQueue() {// TODO Auto-generated method stubarr = null;tail = header = size = 0;return this;}@Overridepublic IQueue ClearQueue() {// TODO Auto-generated method stubtail = header = size = 0;for (int i = 0; i < arr.length; i++) {arr[i] = null;}return this;}@Overridepublic Boolean isEmpty() {return header == tail ? true : false;}@Overridepublic Integer QueueLength() {// TODO Auto-generated method stubreturn size;}@Overridepublic T GetHead() {// TODO Auto-generated method stubreturn (T) arr[header];}@Overridepublic Boolean EnQueue(T t) {// TODO Auto-generated method stubif (size >= length)return false;if (header == tail) {header = 0;arr[header] = t;tail =1;size++;return true;}else {arr[tail]=t;tail = tail +1;size++;return true;}}@Overridepublic T DeQueue() {// TODO Auto-generated method stubif(header == tail) {return null;}else {T t = (T)arr[header];header=header-1;size--;return t;}}}總結
以上是生活随笔為你收集整理的算法题5 用数组实现队列的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: vaniglia 源码学习 (六)
- 下一篇: IIS下的FTP使用