1. 程式人生 > >大二佇列的出隊和入隊分析(鏈式結構)C語言

大二佇列的出隊和入隊分析(鏈式結構)C語言

大學的課程使用的是C語言

佇列是一種特殊的線性表,特殊之處在於它只允許在表的前端(front)進行刪除操作,而在表的後端(rear)進行插入操作,和棧一樣,佇列是一種操作受限制的線性表。進行插入操作的端稱為隊尾,進行刪除操作的端稱為隊頭。

void QueueAppend(LQueue *&q,ElemType e)  //入隊

{
    QNode *p;
    p=(QNode *)malloc(sizeof(QNode));
    p->data=e;
    p->next=NULL;
    if (q->rear==NULL)      //若鏈隊為空,則新節點是隊首節點又是隊尾節點
        q->front=q->rear=p;
    else
    {
        q->rear->next=p;    //將*p節點鏈到隊尾,並將rear指向它
        q->rear=p;
    }
}
  上面的函式完成元素e的如佇列操作,在實現的時候首先是要if語句判斷當前所操作的佇列是否為空。為空,則只需將佇列的頭(Q->front)指向新建的節點p;非空,則將隊尾(Q->real->next)指向新建的節點p,再修改隊尾指標




bool QueueDelete(LQueue *&q,ElemType &e)   //出隊
{
    QNode *t;
    if (q->rear==NULL)      //佇列為空
        return false;
    t=q->front;             //t指向第一個資料節點
    if (q->front==q->rear)  //佇列中只有一個節點時
        q->front=q->rear=NULL;
    else                    //佇列中有多個節點時
        q->front=q->front->next;
    e=t->data;
    free(t);
    return true;
}

  上面的函式完成的是出佇列操作,在實現的時候先判斷佇列是否為空。為空;丟擲為空提示;非空;先將隊頭的元素(Q->front->data)賦值給待定的變數e,LQNone型的指標型變數*p指向佇列的隊頭(Q->front),隊頭節點(Q->front)指向隊頭節點的下一個節點(Q->front->next),此時隊頭元素已經脫鏈,如果出隊的是最後一個元素時,還應將隊尾(Q->real)置為空(NULL),最後再釋放*p的記憶體

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

      我的實驗報告裡面的演算法分析也只寫了佇列的出隊和入隊操作,個人感覺佇列的出隊和入隊操作是佇列不同於線性表的地方