隊(duì)列的基本概念
隊(duì)列(簡(jiǎn)稱隊(duì))也是一種特殊的線性表,隊(duì)列的數(shù)據(jù)元素以及數(shù)據(jù)元素間的邏輯關(guān)系和線性表完全相同。差別是線性表允許在任意位置插入和刪除,而隊(duì)列只允許在一端進(jìn)行插入操作而在另一端進(jìn)行刪除操作。
隊(duì)列中允許插入操作的一端稱為隊(duì)尾,允許進(jìn)行刪除操作的一端稱為隊(duì)頭。隊(duì)列的插入操作通常稱為入隊(duì)列,隊(duì)列的刪除操作通常稱為出隊(duì)列。
根據(jù)隊(duì)列的定義,每次入隊(duì)列的數(shù)據(jù)元素都放在原來的隊(duì)尾之后成為新的隊(duì)尾元素,每次出隊(duì)列的數(shù)據(jù)元素都是隊(duì)頭元素。這樣,最先入隊(duì)列的數(shù)據(jù)元素總是最先出隊(duì)列。最后入隊(duì)列的數(shù)據(jù)元素總是最后出隊(duì)列,所以隊(duì)列也稱為先進(jìn)先出表。
隊(duì)列的抽象數(shù)據(jù)類型
1、數(shù)據(jù)集合:隊(duì)列的數(shù)據(jù)集合可以表示為a1,a2,a3,a4,每個(gè)數(shù)據(jù)元素的數(shù)據(jù)類型可以是任意類類型
2、操作集合:1、入隊(duì)列操作(append())
2、出隊(duì)列操作(delete())
3、取隊(duì)列的頭元素(getFront())
4、判斷隊(duì)列是否為空(isEmpty())
源代碼------順序存儲(chǔ)結(jié)構(gòu)
隊(duì)列接口代碼
package com.queue; //隊(duì)列接口 public interface Queue { //入隊(duì)列操作 public void append(Object object); //出隊(duì)列操作 public Object delete(); //取隊(duì)列頭元素 public Object getFront(); //判斷隊(duì)列是否為空 public boolean isEmpty(); } |
隊(duì)列接口實(shí)例化類
package com.queue; public class SeqQueue implements Queue { //相關(guān)屬性和構(gòu)造方法 //默認(rèn)大小 static final int defauleSize=10; //隊(duì)頭 int front; //隊(duì)尾 int rear; //隊(duì)列元素個(gè)數(shù)統(tǒng)計(jì) int count; //隊(duì)列初始化大小 int maxSize; //隊(duì)列數(shù)據(jù)信息 Object[] data; public void initiate(int sz){ maxSize=sz; front=rear=0; count=0; data=new Object[sz]; } public SeqQueue(){ initiate(defauleSize); } public SeqQueue(int length){ initiate(length); } @Override public void append(Object object) { // TODO Auto-generated method stub if(count>0&&front==rear){ return; } data[rear]=object; //求模運(yùn)算 rear=(rear+1)%maxSize; count++; } @Override public Object delete() { // TODO Auto-generated method stub Object object=null; if(count==0){ object="404"; return object; }else{ object=data[front]; //求模運(yùn)算 front=(front+1)%maxSize; count--; return object; } } @Override public Object getFront() { // TODO Auto-generated method stub Object object=null; if(count==0){ object="404"; return object; }else{ return data[front]; } } @Override public boolean isEmpty() { // TODO Auto-generated method stub return count!=0; } }
|
實(shí)驗(yàn)結(jié)果:
package com.queue; public class QueueTest { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub SeqQueue queue=new SeqQueue(); //判斷隊(duì)列是否為空 boolean target=queue.isEmpty(); System.out.println("隊(duì)列是否為空:"+target); //入隊(duì)列 queue.append("c"); queue.append("c++"); queue.append("c#"); queue.append("object-c"); queue.append("php"); queue.append("java"); queue.append("ruby"); queue.append("javascript"); queue.append("ext"); queue.append("jquery"); //再次判斷隊(duì)列是否為空 boolean targets=queue.isEmpty(); System.out.println("再次判斷隊(duì)列是否為空:"+targets); //出隊(duì)列 Object object=queue.delete(); System.out.println("出隊(duì)列的元素是:"+object); //取隊(duì)列頭元素 Object front=queue.getFront(); System.out.println("隊(duì)列頭元素是:"+front); } } |
圖片展示:
源代碼--------鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)