佇列的鏈式實現

2021-07-05 18:03:51 字數 1469 閱讀 2044

今天最後老師問當棧的鏈式實現完成後,再實現佇列,是否會簡單?我回答,是的。

我的理由很簡單,因為操作相同,其他的也應該類似,所以不會太難。至於實現之後,我的感受是怎麼樣的,我留在最後再說,順便總結一下。

下面是標頭檔案:

#ifndef linklistqueue_h

#define linklistqueue_h

struct node;

class queue;

#endif

下面是實現檔案:

#include"linklistqueue.h"

#includeusing std::cout;

using std::endl;

queue::queue()

queue::~queue()

front = null; rear = null;//為了安全對其賦值null;

cout << "析構函式!" << endl;

delete pre;

}bool queue::enqueue(const int &data)

s->data = data;

s->next = null;//為其他函式設定結束條件

rear->next = s;

rear = s;

return true;

}bool queue::dequeue(int &data)

bool queue::getfront(int &data)const

bool queue::getrear(int &data) const

bool queue::isempty() const

int queue::length() const

return i;

}void queue::clear()

主函式測試:

#include#include"linklistqueue.h"

using namespace std;

int main()

delete queue;

system("pause");

return 0;

}

我總結一下:

首先是front 和 rear兩個指標,一般來說,front指向佇列中第乙個元素的前面,所以這個自然極其的類似鍊錶中的head指標,所以為front分配乙個空間(new)。

對於rear,書中的定義是指向尾節點,所以可以用它來指向當前最後乙個節點,類似鍊錶中的尾插法的實現手段。

這兩個我認為是很關鍵的,保持了出入於刪除的一致性,當然,如果你看我的**,你會發現有在刪除之前有乙個

if (front->next == rear) rear = front;

這個是防止rear成為野指標,從而不能再次插入與刪除。

鏈式佇列的實現

typedef struct nodelinklist typedef structlinkqueue void setnull linkqueue p set a empty queue,front and rear pointer both point to a head node void q...

鏈式佇列的實現

include include define n 10 定義結點 typedef struct node node 定義佇列 typedef struct queue queue 判斷佇列是否為空 int empty queue queue 初始化佇列 queue init 入隊 int inque...

鏈式佇列的實現

include include define elementtype int typedef struct nodeqnode typedef struct queue const elementtype error 1 int errorflag 0 建立乙個佇列 queue createqueu...