資料結構實現 2 3 鍊錶佇列(C 版)

2021-08-31 11:50:07 字數 3679 閱讀 8507

3. 演算法複雜度分析

4. 完整**

在前面第三節中,我們通過動態陣列實現了佇列這種資料結構。當然,佇列也可以通過鍊錶來實現所謂的鍊錶佇列

鍊錶佇列的結構如上圖所示,鍊錶佇列有著佇列的基本特性:

1.佇列隊頭隊尾兩端。

2.入隊操作只能從隊尾進行,出隊操作只能從隊頭進行。

3.先入隊的先出隊,即先進先出(first in first out),fifo

因為鍊錶對鍊錶末端操作時間複雜度較大,所以新增了乙個tail指標,使得原來o(n)的時間複雜度變成了o(1)級別的。由於tail指標的加入,而且我們的操作也只針對headtail,所以可以去掉虛擬頭結點,因此我們需要從底層來重新構建這個類。

與陣列佇列類似,可以利用乙個由純虛函式構成的抽象類作為乙個介面來定義這些操作。具體**如下:

template 

class queue

;

下面只需要通過繼承抽象類,並且重寫純虛函式,就可以完成鍊錶佇列的實現。鍊錶佇列類的框架如下:

template 

class linkedlistqueue : public queue..

.private:

node

*head;

node

*tail;

int m_size;

};

其中的node類是第五節鍊錶中定義的乙個類,這裡不再重複定義,直接使用,node類的定義如下:

template 

class node

public:

t m_data;

node *next;

};

linkedlistqueue類內部定義頭指標、尾指標以及鍊錶長度,為了保護資料,把變數都放在private部分,為了相容更多型別,這裡使用了泛型的概念。

template 

class linkedlistqueue : public queue

else

m_size++;}

...}

;

由於使用了尾指標,入隊操作十分方便。但是要注意,當鍊表為空時的特殊情況。

template 

class linkedlistqueue : public queue

node

*node = head->next;

delete head;

head = node;

m_size--;}

...}

;

template 

class linkedlistqueue : public queue

return head->m_data;}.

..};

佇列只能獲得隊首元素。

template 

class linkedlistqueue : public queue

bool isempty()

void

print()

cout <<

"null rear"

<< endl;}.

..};

函式

最壞複雜度

平均複雜度

enqueue

o(1)

o(1)

函式最壞複雜度

平均複雜度

dequeue

o(1)

o(1)

函式最壞複雜度

平均複雜度

front

o(1)

o(1)

總體情況:

操作時間複雜度

增o(1)

刪o(1)

查o(1)

由此可以看出,鍊錶佇列操作的增、刪、查都是o(1)級別的時間複雜度。

注:佇列並不提供改的操作。

node類**:

template 

class node

public:

t m_data;

node *next;

};

抽象類介面**:

#ifndef __queue_h__

#define __queue_h__

template

class queue

;#endif

鍊錶佇列**:

#ifndef __linkedlistqueue_h__

#define __linkedlistqueue_h__

#include

"queue.h"

using namespace std;

template

class linkedlistqueue : public queue

intsize()

bool isempty()

void

print()

cout <<

"null rear"

<< endl;

}//入隊操作

void

enqueue

(t num)

else

m_size++;}

//出隊操作

void

dequeue()

node

*node = head->next;

delete head;

head = node;

m_size--;}

//獲得隊首元素

t front()

return head->m_data;

}private:

node

*head;

node

*tail;

int m_size;};

#endif

C資料結構 佇列 鍊錶實現

佇列 queue 是具有兩個特殊屬性的鍊錶。第一,新項只能新增到鍊錶的末尾 第二,只能從鍊錶的開頭移除項。可以把佇列想象成排隊買票的人,你從隊尾加入佇列,買完票後從隊首離開。佇列是一種 先進先出 first in first out,fifo 的資料形式。queue.h ifndef queue h...

資料結構 C 版 鍊錶

大家如果有什麼問題,可以給我發email warensoft foxmail.com 下面是c 版鍊錶的實現過程 分為兩個類 1.csarraylistnode 類,用於表示乙個結點 2.csarraylist,用於表示鍊錶本身 下面是這兩個類的檢視 大家可以根據檢視得到這兩個類的基本結構 中有詳細...

資料結構 C 版 鍊錶

原文 http blog.csdn.net warensoft archive 2007 10 16 1827279.aspx 下面是c 版鍊錶的實現過程 分為兩個類 1.csarraylistnode 類,用於表示乙個結點 2.csarraylist,用於表示鍊錶本身 下面是這兩個類的檢視 大家可...