/* 隊(duì)列的鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)也是通過由節(jié)點(diǎn)構(gòu)成的單鏈表實(shí)現(xiàn)的,此時(shí)只能在 表首進(jìn)行刪除操作,在表尾進(jìn)行插入操作。*/#include <stdio.h>#include <stdlib.h>typedef char ElemType;//鏈隊(duì)中數(shù)據(jù)節(jié)點(diǎn)的類型QNode定義typedef struct qnode{ ElemType data; struct qnode *next;}QNode;//鏈隊(duì)節(jié)點(diǎn)的類型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)//判斷是否為空{(diào) return (q->rear==NULL);}void enQueue(LiQueue *&q,ElemType e)//入隊(duì){ QNode * p; p = (QNode *)malloc(sizeof(QNode)); p->next=NULL; p->data=e; if(q->rear==NULL)//隊(duì)為空的情況 q->front=q->rear=p; else { q->rear->next=p; q->rear=p; }}bool deQueue(LiQueue *&q,ElemType &e)//出隊(duì){ QNode *p; if(q->rear==NULL) return false; else//元素不為空時(shí) { p=q->front; if(p->next==NULL)//當(dāng)只有一個(gè)元素時(shí) q->front=q->rear=NULL; else//有多個(gè)元素時(shí) { q->front=p->next; } e=p->data; free(p); return true ; }}int main(){ ElemType e; LiQueue *q; PRintf("鏈隊(duì)的基本運(yùn)算如下:/n"); printf(" (1)初始化鏈隊(duì)q/n"); InitQueue(q); printf(" (2)依次進(jìn)鏈隊(duì)元素a,b,c/n"); enQueue(q,'a'); enQueue(q,'b'); enQueue(q,'c'); printf(" (3)鏈隊(duì)為%s/n",(QueueEmpty(q)?"空":"非空")); if (deQueue(q,e)==0) printf("/t提示:隊(duì)空,不能出隊(duì)/n"); else printf(" (4)出隊(duì)一個(gè)元素%c/n",e); printf(" (5)依次進(jìn)鏈隊(duì)元素d,e,f/n"); enQueue(q,'d'); enQueue(q,'e'); enQueue(q,'f'); printf(" (6)出鏈隊(duì)序列:"); while (!QueueEmpty(q)) { deQueue(q,e); printf("%c ",e); } printf("/n"); printf(" (7)釋放鏈隊(duì)/n"); DestroyQueue(q); return 0;}運(yùn)行結(jié)果:
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注