佇列也是一種特殊的線性表,特點是先進先出,只能在表的一端進行插入,在另一端進行刪除。向佇列中插入元素的過程稱為入隊(enqueue),刪除元素的過程稱為出隊(dequeue),並把允許入隊的一端稱為隊尾,允許出的的一端稱為隊頭,沒有任何元素的佇列則稱為空隊。其一般結構如下所示:
與棧的實現相似,佇列也有兩種實現方式,分別基於陣列和基於鍊錶。由於佇列是被限制的線性表,所以不能提供線性表中的方法如:獲取指定索引處的元素、查詢元素的位置、向指定索引處插入元素、刪除索引處的元素等。
佇列的常用操作如下所示:
下面分別介紹兩種方式的實現:
1.基於陣列的佇列
public
class arrayqueue
//新增元素,加到隊尾
public boolean add(t value)
if(rear > maxsize -1)
data[rear] = value;
rear++;
return
true;
}//佇列長度
public
intlength()
//判斷是否為空
public boolean isempty()
return
false;
}//刪除元素,刪除隊頭節點
public t del()
tmp = data[front];
data[front] = null;
front++;
return tmp;
}//佇列元素遍歷
public string tostring()
return str;
}public
static
void
main(string args)
}
測試結果:
false
qwer asdf zxcv
asdf zxcv
zxcv
2.基於鍊錶的佇列
public
class nodequeue
}nodefront = null;
noderear = null;
public
nodequeue()
//新增節點到隊尾,如果隊列為空頭結點和尾節點都只向新節點
public
void
add(t value)
if(front == null)
else
}//返回佇列的長度
public
intlength()
int num = 1;
nodecur = front;
while(cur.next!=null)
return num;
}//刪除節點,將隊頭的節點刪除
public boolean del()
node n = front.next;
front = n;
return
true;
}//列印佇列內容
public string tostring()
return str;
}public
static
void
main(string args)
}
測試結果:
0
qwer asdf zxcv
3asdf zxcv
2
資料結構之迴圈佇列(Java實現)
理論參考其他文章!我們假設乙個佇列有n個元素,則順序儲存的佇列需建立乙個大於n的陣列,並把佇列的所有元素儲存在陣列的前n個單元,陣列下標為0的一端即是隊頭。所謂的入佇列操作,其實就是在隊尾追加乙個元素,不需要移動任何元素,因此時間複雜度為0 1 與棧不同的是,佇列元素的出列是在隊頭,即下標為0的位置...
Java資料結構之佇列的實現
佇列是一種特殊的線性表,只允許在表的一端進行插入操作,在另一端 進行刪除操作。允許插入的一端稱為隊尾,允許刪除的一端稱為隊頭。當佇列中沒有任何元素時稱為空隊。插入操作一般稱為入隊,刪除操作一般稱為出隊。可以模擬現實中買票 打飯時的有秩序排隊的過程。佇列需要經常執行插入和刪除運算,而每一次插入或刪除,...
資料結構 Java實現佇列
佇列是一種特殊的線性表,特殊之處在於它只允許在表的前端 head 進行刪除操作,而在表的後端 tail 進行插入操作,和棧一樣,佇列是一種操作受限制的線性表。進行插入操作的端稱為隊尾,進行刪除操作的端稱為隊頭。佇列中沒有元素時,稱為空佇列。佇列的資料元素又稱為佇列元素。在佇列中插入乙個佇列元素稱為入...