佇列的用法

2021-08-08 16:14:31 字數 3836 閱讀 6296

佇列本質上是一種特殊的線性表,它是在一端(隊首)進行刪除操作,而在另外一端(隊尾)進行插入操作,它要遵循先進先出的規則。

隊首(front) :允許進行刪除的一端稱為隊首。

隊尾(rear) :允許進行插入的一端稱為隊尾。

佇列有兩種資料儲存方式:1、順序儲存結構(靜態佇列,用陣列實現,位址是連續的)。2、鏈式儲存結構(動態佇列,用動態鍊錶實現,位址是不連續的)。

一、佇列的基本操作:

queue 模板類的定義在標頭檔案中。

與stack 模板類很相似,queue 模板類也需要兩個模板引數,乙個是元素型別,乙個容器類

型,元素型別是必要的,容器型別是可選的,預設為deque 型別。

定義queue 物件的示例**如下:

queue q1;

queue q2;

queue 的基本操作有:

入隊,如例:q.push(x); 將x 接到佇列的末端。

出隊,如例:q.pop(); 彈出佇列的第乙個元素,注意,並不會返回被彈出元素的值。

訪問隊首元素,如例:q.front(),即最早被壓入佇列的元素。

訪問隊尾元素,如例:q.back(),即最後被壓入佇列的元素。

判斷佇列空,如例:q.empty(),當佇列空時,返回true。

以下是queue最基本的用法:

#include 

#include

#include

using

namespace

std;

int main()

cout

cout

<

system("pause");

return

0;}

順序儲存結構:這種結構事先要基本確定佇列的大小,不支援動態分配儲存空間,所以插入和刪除元素比較省時,但是會造成空間的浪費。為了節省空間,這裡引入了迴圈佇列,本質上也是順序儲存結構。

鏈式儲存結構:可以不需要事先知道佇列的大小,支援動態和釋放空間,但是插入和刪除操作比較耗時,也稱鏈佇列。

建議:當事先基本上確定佇列的大小,且插入和刪除操作比較頻繁時,優先考慮迴圈佇列。。

1.迴圈佇列實現:

標頭檔案宣告和定義放一塊了,只實現了基本的操作,不是很完善,等看了原始碼再改。。

標頭檔案:在queue.h標頭檔案中

#ifndef queue_h

#define queue_h

#include

#include

using

namespace

std;

template

class queue

;template

queue::queue(int maxsize) :front(0), rear(0),capacity(maxsize)

template

queue::queue(const queue& rhs) :front(rhs.front), rear(rhs.rear),capacity(rhs.capacity)

template

queue& queue::operator=(const queue& rhs)

return *this;

}template

queue::~queue()

template

bool queue::empty() const

template

bool queue::isfull() const

template

int queue::size() const

template

void queue::push(const t& data)

else

//當佇列滿了之後可進行擴容

delete [ ] array;

array = newarray;

front = 0;

array[rear] = data;

rear =this->rear+1;

capacity = 2*capacity;

}}template

void queue::pop()

else

cout

<

t& queue::front()

template

t queue::front() const

template

t& queue::back()

template

t queue::back() const

#endif // queue_h

測試**:

網上找的**:

#include

#include"queue.h"

using namespace std;

int main()

}cout << endl;

return

0;}

2.鏈佇列的實現:

標頭檔案:

在queue1.h標頭檔案中

#ifndef queue_h1

#define queue_h1

/**********在隊頭刪除節點,隊尾新增節點*************/

#include

using

namespace

std;

template

class queue

// queuenode() = default;

};queuenode * front; //隊頭指標

queuenode * rear; // 隊尾指標

int count;

};//此處不設頭節點

template

queue::queue() :front (null), rear (null), count(0)

{}template

queue::~queue()

template

void queue::push(const t & node)

count++;

}template

bool queue::empty() const

template

int queue::size() const

template

void queue::clear()

count = 0;

}template

void queue::pop()

queuenode * frontofqueue = front;

front = front->next;

delete frontofqueue;

count--;

}template

t& queue::front()

return front->data;

}template

t queue::front() const

return front->data;

}#endif // queue_h1

測試**:

#

#include"queue1.h"

using

namespace

std;

int main()

}cout

<< endl;

return

0;}

優先佇列的用法

在優先佇列中,優先順序高的元素先出佇列。標準庫預設使用元素型別的 操作符來確定它們之間的優先順序關係。優先佇列的第一種用法,也是最常用的用法 int qi 通過 操作符可知在整數中元素大的優先順序高。故示例1中輸出結果為 9 6 5 3 2 第二種方法 在示例1中,如果我們要把元素從小到大輸出怎麼辦...

Queue佇列的用法

佇列是一種特殊的線性表,它只允許在表的前端進行刪除操作,而在表的後端進行插入操作。遵循的是先入先出的原則。陣列的使用方法 使用陣列模擬佇列 一般來說,front指向頭部,且指向頭部的前乙個位子 rear指向尾部 包含尾部的資料 使用陣列模擬佇列 編寫乙個arrayqueue class arrayq...

優先佇列用法

在優先佇列中,優先順序高的元素先出佇列。標準庫預設使用元素型別的 操作符來確定它們之間的優先順序關係。優先佇列的第一種用法,也是最常用的用法 priority queueqi 通過 操作符可知在整數中元素大的優先順序高。故示例1中輸出結果為 9 6 5 3 2 第二種方法 在示例1中,如果我們要把元...