大二佇列的出隊和入隊分析(鏈式結構)C語言
阿新 • • 發佈:2019-01-04
大學的課程使用的是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的記憶體
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
我的實驗報告裡面的演算法分析也只寫了佇列的出隊和入隊操作,個人感覺佇列的出隊和入隊操作是佇列不同於線性表的地方