環形佇列如何判空和判滿

2021-10-07 15:13:01 字數 1899 閱讀 1588

環形佇列的判空和判滿是乙個比較基礎的問題,可以通過以下兩種方法來實現,

定義環形佇列抽象類

#define max_size    1024

class circularqueue ;

circularqueue::circularqueue(int size)

this->data = new int[size];

this->size = size;

this->head = 0;

this->tail = 0;

}circularqueue::~circularqueue()

}int circularqueue::getsize()

方法一: 

class queue1 : public circularqueue 

bool enqueue(int val);

bool dequeue(int *ptr);

bool empty();

bool full();

};bool queue1::empty()

bool queue1::full()

bool queue1::enqueue(int val)

this->data[this->head] = val;

this->head = (this->head + 1) % this->size;

this->cap++;

return true;

}bool queue1::dequeue(int* ptr)

*ptr = this->data[this->tail];

this->tail = (this->tail + 1) % this->size;

this->cap--;

return true;

}

方法二: 

class queue2 : public circularqueue

bool enqueue(int val);

bool dequeue(int *ptr);

bool empty();

bool full();

};bool queue2::empty()

bool queue2::full()

bool queue2::enqueue(int val)

this->data[this->head] = val;

this->head = (this->head + 1) % this->size;

return true;

}bool queue2::dequeue(int* ptr)

*ptr = this->data[this->tail];

this->tail = (this->tail + 1) % this->size;

return true;

}

測試**:

#include using namespace std;

void test()

void test2()

int main(void)

輸出結果:

enqueue result: 1

enqueue result: 1

enqueue result: 1

dequeue result: 1

enqueue result: 1

enqueue result: 1

enqueue result: 1

enqueue result: 0

dequeue result: 1

enqueue result: 1

迴圈佇列的兩種實現方式 判空與判滿存在區別

第一種實現方式 front 隊頭位置 rear 隊尾下乙個位置 size 元素個數 入隊 尾插,array rear value 出隊 front 迴圈 front rear size front rear 0 include include include typedef struct mycir...

佇列判空 (二)佇列的實現

源於生活,抽象生活。生活中的佇列 當然是停車場排隊出場啦。計算機的佇列 簡答的說就是先入先出 fifo 在大腦中要有的概念是 隊頭 狀態 就是排隊第乙個交錢準備出場的車 隊尾 狀態 最後乙個排隊準備交錢的車 入隊 動作 add.把車開入 出停車場的道 出棧 動作 out.交完錢,把車開出停車場。fi...

golang slice的判空 和 併發安全

判斷slice是否為空,不能與nil進行比較做判斷,因為slice有可能已初始化。而是應該使用len計算長度。例如package main import fmt func main fmt.println slice1 nil slice1 nil fmt.println slice1 len le...