資料結構與演算法之佇列

2022-03-28 18:56:12 字數 3394 閱讀 5073

前言:我寫資料結構與演算法這幾篇博文的目的是為了讓大家對資料結構與演算法有乙個基礎的認知。想更上一層樓的還須各位自學。

佇列是資料結構的一種。他的原理是先進先出(後進後出),和棧,表一樣,佇列也分為順序佇列和鏈佇列。如圖:

順序棧最開始時:

順序佇列插入元素後:

順序佇列刪除元素後:

總結順序佇列的特點: 順序佇列有乙個隊首front和對尾rear,在最開始的時候他們都是-1,不指向任何儲存單元。隊尾可以執行並且只能執行插入操作,隊首可以執行刪除或者查詢操作,換句話說只要不是插入操作都可以在隊首執行。還有乙個指向問題,關於這個問題我在查資料的時候發現他們並沒有標準。所以大家就按照我的思路就好。等你們懂了以後自然就知道裡面的奧秘。大家可以看到,rear是一直指向隊尾元素的儲存單元的(前提是佇列裡面有元素),而front是一直指向隊首元素的前乙個儲存單元。這個概念一定要看懂,不然下面的**你會理解的很困難。

鏈佇列開始時:

鏈佇列插入元素後:

鏈佇列刪除元素後:

鏈佇列總結:基本原理同上

先舉幾個例子吧,生活中最經典的例子就是排隊啦,排隊的時候是不是先來的先辦事呢?按理說肯定是的,但是現實生活中往往有些人不按規矩的插隊,他們或許真有急事又或許故意的為之,反正現在敢於說「不!」的人已經不多了。我在這沒有其他的意思,包括我自己有時候也插隊,有時候被人插隊的時候也是沒有勇氣去說人家。。。

另外乙個例子,就是敲鍵盤,你敲abcd他就出來abcd,假如你和你的女朋友聊天,你本來想說你是我的god,按照佇列的思想你女朋友收到的肯定是god,因為先進先出嘛,如果鍵盤不按照佇列辦事的話你女朋友可能收到的是dog,好了,等著挨揍吧。

在遇到問題時如果你想這個問題必須按照順序來執行,不能插隊也不能有例外,就用佇列吧。

首先呢,我們來看看對列在bcl中是怎麼實現的 :

1

namespace佇列2

16}17 }

來看看執行結果:

新建乙個介面,這個介面順序佇列和鏈佇列都會用到

1

namespace佇列2

//屬性

6void

enqueue(t item);

7t dequeue();

8t peek();9}

10 }

我這寫的方法少,其他的方法大家自己去看看

順序佇列的實現

新建乙個類:

1

namespace佇列2

17public myqueue() :this(10

) //這個建構函式的意思就是呼叫了含有乙個引數的構造並且傳遞10進去

1821

22public

intcount

2325}26

27public

void

enqueue(t item)

2833

else

3439}40

41public

t dequeue()

4250

else

515556}

5758

public

t peek()

5964

else

656970}

71}72 }

下面來控制台看看效果:

namespace

佇列 }

效果是一樣的。

鏈佇列:

鏈佇列和順序佇列不同的地方就在於順序佇列內部使用的是陣列,而鏈佇列使用的是節點,所以咱們要先寫乙個節點類:

1

namespace佇列2

10set 11}

12private nodenext;

1314

public nodenext

1517

set 18}

1920

21public

node(t data) //構造

222627}

28 }

鏈佇列的類:

1

namespace佇列2

1516

public

intcount

1719}20

21public

void

enqueue(t item)

2230

else

3136}37

38public

t dequeue()

3944

else

4554

else

5561}62

}6364public

t peek()

6570

else

717475}

76}77 }

在控制台看看效果:

namespace

佇列 }

效果都是一樣的,說明鏈佇列也成功了。

1 queue queue=new queue();

2 queue.enqueue(3

); //在隊尾插入乙個元素,無返回值

3queue.dequeue(); //在隊首取得隊首元素並返回,然後刪除隊首元素

4queue.peek(); //在隊首取得隊首元素並返回

5queue.count; //佇列裡面的元素個數,無返回值

6queue.clear(); //清空佇列

7

資料結構與演算法之佇列

佇列是乙個有序的線性列表,可以用陣列或鍊錶來實現,遵循先進先出 後進後出的原則。佇列只能從列表的一端進行入隊另一端進行出隊操作。佇列有兩種儲存資料的形式 順序儲存 順序儲存的佇列也稱為順序佇列,內部使用陣列來實現的,順序佇列又分為非迴圈順序佇列和迴圈順序佇列。順序佇列是採用兩個指標,頭指標 fron...

《資料結構與演算法》之佇列

資料結構與演算法 之鍊錶 資料結構與演算法 之鏈棧 資料結構與演算法 之排序 資料結構與演算法 之二分查詢 資料結構與演算法 之二叉樹 如何理解 佇列 你可以把它想象成排隊買票,先來的先買,後來的人只能站末尾,不允許插隊。先進者先出,這就是典型的 佇列 我們知道,棧只支援兩個基本操作 入棧 push...

資料結構與演算法之佇列

佇列介紹 1.佇列是乙個有序列表,可以用陣列或是鍊錶來實現。2.遵循先入先出的原則。即 先存入佇列的資料,要先取出。後存入的要後取出 3.示意圖 陣列模擬佇列 當我們將資料存入佇列時稱為 addqueue addqueue 的處理需要有兩個步驟 思路分析 1.將尾指標往後移 rear 1 當fron...