嚴蔚敏版資料結構——佇列(連結串列實現)
阿新 • • 發佈:2018-12-11
佇列有兩種表示方式,我們再看連結串列實現:
個人感覺佇列也就是連結串列的一種特殊表,如果前面的連結串列知識通關了這裡隨便看看記住佇列的遊戲規則就行了。還是和前面一樣,先要有頭結點,總體來說就是單鏈表的插刪。
這裡與順序佇列不同的是不需要判斷佇列是不是滿了,連結串列最大的特點是動態分配節點空間。
詳情還是在程式碼中描述:
佇列的鏈式儲存結構:
typedef struct QNode { int data; struct QNode *next; }QNode; typedef struct { QNode front; QNode rear; }LinkQueue;
鏈隊的初始化,構造一個空佇列:
int InitQueue(LinkQueue &Q)
{
Q.front=Qrear=new QNode;
Q.front->next=NULL;
return 1;
}
入隊
int EnQueue(LinkQueue &Q, int e) { QNode *p; p=(QNode *)malloc(sizeof(QNode)); p->data=e; p->next=NULL; Q.rear->next=p; Q.rear=p; return 1; }
出隊
int DeQueue(LinkQueue &Q, int &e)
{
QNode *p;
if(Q.front==Q.rear)
return 0;
p=Q.front0>next;
e=p->data;
Q.front->next=p->next;
//最後一個被刪那rear也刪了,所以重置rear
if(Q.rear==p)
Q.rear=Q.front;
delepe p;
return 1;
}
取隊頭元素
int GetHead(LinkQueue Q) { if(Q.front!=Q.rear) return Q.front->next->data; }