1. 程式人生 > >單鏈隊列的實現

單鏈隊列的實現

簡單 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

單鏈隊列的實現