1. 程式人生 > >佇列的鏈式儲存結構以及實現

佇列的鏈式儲存結構以及實現

佇列的鏈式儲存結構,其實就是線性表的單鏈表,只不過它只能尾進頭出而已,通常簡稱為鏈佇列。為了操作上的方便,將隊頭指標指向鏈佇列的頭結點,隊尾指標指向終端結點。

當佇列為空時,front和rear都指向頭結點。

鏈佇列的結構定義如下所示:

typedef  int QElemType;
//QNode代表隊列中元素的結點
//QueuePtr指標指向當前鏈佇列
typedef  struct QNode {
    QElemType data;
    struct QNode *next;
}QNode, *QueuePtr;
//定義鏈佇列的結構
typedef  struct
{
    QueuePtr front, rear;
}LinkQueue;

鏈佇列的初始化:

LinkQueue *InitQueue()
{
    LinkQueue *Q = new LinkQueue;
    Q->front = Q->rear = new QNode;
    if (!Q->front)return 0;
    Q->front->next = NULL;
    return Q;
}

鏈佇列的入隊操作:

//鏈佇列的入隊操作
bool EnQueue(LinkQueue *Q, QElemType e)
{
    QueuePtr s = new QNode;
    if (!s)
    {
        cout <<
"分配失敗" << endl; return false; } s->data = e; s->next = NULL; Q->rear->next = s; Q->rear = s; cout << e << endl; return true; }

鏈佇列的出隊操作:

//鏈佇列的出隊操作
bool DeQueue(LinkQueue *Q, QElemType *e)
{
    QueuePtr p;
    if (Q->front ==
Q->rear) { cout << "空隊" << endl; return false; } p = Q->front->next; *e = p->data; Q->front->next = p->next; if (Q->rear == p) { Q->rear = Q->front; } cout << *e << endl; delete p; return true; }

主函式中測試程式碼如下:

int main()
{
    LinkQueue *lq = InitQueue();
    cout << "入隊的元素:" << endl;
    for (auto i = 0; i < 10; i++)
    {
        EnQueue(lq, i);
    }
    int temp = 0;
    //出隊的元素
    cout << "出隊的元素:" << endl;
    for (auto i = 0; i < 4; i++)
    {
        DeQueue(lq, &temp);
    }
    return 0;
}

輸出如下所示:

碼碼小蟲

歡迎關注公眾號,分享一些Unity3D、C#、C++資料結構和演算法相關的學習筆記。

碼碼小蟲