開發者實現鏈隊列 5 大操作(初始化、判空、入隊、出隊、取頭),編譯報錯集中在第 42 行 `Empty_Queue` 判斷邏輯,且最佳回答直接指出:代碼不全,沒有結構體 `LinkQueue` 定義。
typedef struct QNode {
int data;
struct QNode *next;
} QNode, *QueuePtr;
typedef struct {
QueuePtr front; // 隊頭指針
QueuePtr rear; // 隊尾指針
} LinkQueue;
int InitQueue(LinkQueue *Q) {
Q->front = Q->rear = (QueuePtr)malloc(sizeof(QNode));
if (!Q->front) return 0;
Q->front->next = NULL;
return 1;
}
int EmptyQueue(LinkQueue Q) { return Q.front == Q.rear; }
int EnQueue(LinkQueue *Q, int e) {
QueuePtr p = (QueuePtr)malloc(sizeof(QNode));
if (!p) return 0;
p->data = e; p->next = NULL;
Q->rear->next = p; Q->rear = p;
return 1;
}
int DeQueue(LinkQueue *Q, int *e) {
if (EmptyQueue(*Q)) return 0;
QueuePtr p = Q->front->next;
*e = p->data;
Q->front->next = p->next;
if (Q->rear == p) Q->rear = Q->front;
free(p);
return 1;
}
數據結構代碼必須先寫全結構體定義,再實現操作函數。畫圖推演指針變化(頭節點、front/rear 移動)是避免邏輯錯誤的關鍵。調試時打印節點地址與 `next` 指向,驗證鏈表完整性。