創建鏈式隊列
//創建鏈式隊列 typedef struct QNode { int data; struct QNode *next; }QNode, *QueuePtr; //創建鏈式隊列的鏈接形式 typedef struct { QueuePtr front; QueuePtr rear; }LinkQueue;
初始化鏈式隊列
//鏈式隊列的初始化 bool InitLinkQueue(LinkQueue &Q) { Q.front = Q.rear = (QueuePtr)malloc(sizeof(QNode)); if (!Q.front) return false; Q.front = Q.rear = NULL; return true; }
鏈式隊列的銷毀
//鏈式隊列的銷毀 bool DestroyLinkQueue(LinkQueue &Q) { QNode *p; //從頭結點開始依次向下循環,找尋是否還存在結點,存在就一個個銷毀 while (Q.front) { p = Q.front->next;//下一個地址先存着 free(Q.front); Q.front = p; } //或者直接不用P /* while(Q.front) { Q.rear = Q.front->next; free(Q.front) Q.front = Q.rear; } */ return true; }
鏈式隊列的入隊---只能從隊尾入隊哦!!!!
//鏈式隊列的入隊---只能從隊尾入隊哦!!!! bool EnLinkQueue(LinkQueue &Q, int e) { QNode *p; p = new QNode; if (!p) return false; //想象在最后一個結點是如何插入的,串起來指針 p->data = e; Q.rear->next = p; Q.rear = p; }
鏈式隊列出隊---只能在隊頭出隊
//鏈式隊列出隊---只能在隊頭出隊 bool DeLinkQueue(LinkQueue &Q, int &e) { //先判斷是否為隊空 if (Q.rear == Q.front) return false; QNode *p; p = Q.front->next; e = p->data; Q.front->next = p->next; //如果p就是最后一個結點了,頭指針就是 if (Q.rear == p) { Q.front = Q.rear; } delete p; return true; }
取鏈式隊頭
//取鏈式隊頭 int GetLinkQueueHead(LinkQueue Q) { return Q.front->next->data; }