資料結構之佇列及Java實現

2021-08-18 22:32:35 字數 1876 閱讀 9345

佇列也是一種特殊的線性表,特點是先進先出,只能在表的一端進行插入,在另一端進行刪除。向佇列中插入元素的過程稱為入隊(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 進行插入操作,和棧一樣,佇列是一種操作受限制的線性表。進行插入操作的端稱為隊尾,進行刪除操作的端稱為隊頭。佇列中沒有元素時,稱為空佇列。佇列的資料元素又稱為佇列元素。在佇列中插入乙個佇列元素稱為入...