1. 程式人生 > >帶頭結點的迴圈連結串列表示佇列的初始化、入佇列和出佇列的演算法

帶頭結點的迴圈連結串列表示佇列的初始化、入佇列和出佇列的演算法

假設以帶頭結點的迴圈連結串列表示佇列,並且只設一個指標指向隊尾元素結點(注意不設頭指標),試編寫相應的佇列初始化、入佇列和出佇列的演算法。
帶頭結點迴圈鏈佇列CLQueue的型別為以下LinkList型別:
typedef struct LNode{
    ElemType data;
    struct LNode *next;
} LNode, *LinkList;
typedef LinkList CLQueue;

實現函式如下:

Status InitCLQueue(CLQueue &rear)//佇列初始化
{ 
   rear = (CLQueue)malloc(sizeof(LNode));
   if(!rear) return FALSE;
   rear -> next = rear;
   return TRUE;   
}

Status EnCLQueue(CLQueue &rear, ElemType x)//入佇列
{ 
    CLQueue head,p;
    head = rear -> next;
    p = (CLQueue)malloc(sizeof(LNode));
    if(!p)return FALSE;    //儲存分配失敗
    p -> data = x;
    p -> next = head;
    rear -> next = p;     //把擁有元素e的新節點p賦值給原隊尾的後繼
    rear = p;             //將當前的p設定為隊尾節點
    return TRUE;
}

Status DeCLQueue(CLQueue &rear, ElemType &x)//出佇列
{ 
    CLQueue head,p;
    head = rear -> next;
    if(head == rear)return FALSE;
    p = head -> next;     //將欲刪除的隊頭結點暫存給p
    x = p -> data;        //將欲刪除的隊頭結點的值賦給x
    head -> next = p -> next;//將原隊頭結點的後繼p->next賦值給頭結點後繼
    free(p);
    return TRUE;
}