單鏈隊列的實現
阿新 • • 發佈:2017-10-24
簡單 for lin free 建立 stdio.h ++ 鏈隊列的實現 urn
我把調通的完整代碼放在下面
#include<stdio.h> #include<stdlib.h> #include<malloc.h> #define MAXSIZE 100 #define ElemType int typedef struct qnode{ ElemType data; struct qnode *next; }DataNode; typedef struct{ DataNode *head; DataNode *rear; }LinkQuNode; void InitQueue(LinkQuNode *q) { q->head=q->rear = (DataNode *)malloc(sizeof(DataNode)); q->head->next =NULL; } void enQueue(LinkQuNode &q,ElemType e) { DataNode *p; p= (DataNode *)malloc(sizeof(DataNode)); p->data = e; p->next = NULL; q.rear->next = p; q.rear = p; } int deQueue(LinkQuNode &q,ElemType &e) { DataNode*p; if(q.head==q.rear) return 0; p = q.head->next; e = p->data; q.head->next = p->next; if(q.rear == p) q.rear = q.head; free(p); return 1; } int main(){ LinkQuNode Q; int e; int i; InitQueue(&Q); for(i=0;i<5;i++) enQueue(Q, i); for( i=0; i<5;i++){ deQueue(Q,e); printf("%d",e); } return 0; }
這個隊列最講究的地方就是初始化了,別看簡單,還是有一個陷阱呢,今天掉下去爬了好久沒爬上來
head和rear都是指向DataNode類型的指針,初始化的時候建立了一個DataNode結點讓head和rear都指向它
增加結點的時候在隊尾rear後面增加
刪除結點的時候在隊頭後刪除,註意只有一個結點的情況,為了避免rear丟失,把head的值賦給rear
單鏈隊列的實現