帶頭結點的迴圈連結串列表示佇列的初始化、入佇列和出佇列的演算法
阿新 • • 發佈:2019-01-06
假設以帶頭結點的迴圈連結串列表示佇列,並且只設一個指標指向隊尾元素結點(注意不設頭指標),試編寫相應的佇列初始化、入佇列和出佇列的演算法。
帶頭結點迴圈鏈佇列CLQueue的型別為以下LinkList型別:
帶頭結點迴圈鏈佇列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; }