/* 隊列的鏈式存儲結構也是通過由節點構成的單鏈表實現的,此時只能在 表首進行刪除操作,在表尾進行插入操作。*/#include <stdio.h>#include <stdlib.h>typedef char ElemType;//鏈隊中數據節點的類型QNode定義typedef struct qnode{ ElemType data; struct qnode *next;}QNode;//鏈隊節點的類型LiQueue定義如下typedef struct{ QNode *front; QNode *rear;}LiQueue;void InitQueue(LiQueue *&q)//初始化{ q = (LiQueue *)malloc(sizeof(LiQueue)); q->front=q->rear=NULL;}void DestroyQueue(LiQueue *&q)//銷毀{ QNode *p,*r; p=q->front; if(p!=NULL) { r=p->next; while(r!=NULL) { free(p); p=r; r=p->next; } } free(p); free(q);}bool QueueEmpty(LiQueue *q)//判斷是否為空{ return (q->rear==NULL);}void enQueue(LiQueue *&q,ElemType e)//入隊{ QNode * p; p = (QNode *)malloc(sizeof(QNode)); p->next=NULL; p->data=e; if(q->rear==NULL)//隊為空的情況 q->front=q->rear=p; else { q->rear->next=p; q->rear=p; }}bool deQueue(LiQueue *&q,ElemType &e)//出隊{ QNode *p; if(q->rear==NULL) return false; else//元素不為空時 { p=q->front; if(p->next==NULL)//當只有一個元素時 q->front=q->rear=NULL; else//有多個元素時 { q->front=p->next; } e=p->data; free(p); return true ; }}int main(){ ElemType e; LiQueue *q; PRintf("鏈隊的基本運算如下:/n"); printf(" (1)初始化鏈隊q/n"); InitQueue(q); printf(" (2)依次進鏈隊元素a,b,c/n"); enQueue(q,'a'); enQueue(q,'b'); enQueue(q,'c'); printf(" (3)鏈隊為%s/n",(QueueEmpty(q)?"空":"非空")); if (deQueue(q,e)==0) printf("/t提示:隊空,不能出隊/n"); else printf(" (4)出隊一個元素%c/n",e); printf(" (5)依次進鏈隊元素d,e,f/n"); enQueue(q,'d'); enQueue(q,'e'); enQueue(q,'f'); printf(" (6)出鏈隊序列:"); while (!QueueEmpty(q)) { deQueue(q,e); printf("%c ",e); } printf("/n"); printf(" (7)釋放鏈隊/n"); DestroyQueue(q); return 0;}運行結果:
新聞熱點
疑難解答