隊列的鏈式優勢是不用考慮隊滿狀況。代碼以下:ios
#include <iostream> #include <stdio.h> #include <stdlib.h> /* run this program using the console pauser or add your own getch, system("pause") or input loop */ //定義鏈式隊列結點 typedef struct LinkNode{ int data; struct LinkNode *next; }LinkNode; //定義隊頭尾指針結點(或者叫隊列) typedef struct { LinkNode *rear,*front; }LinkQueue; //初始化隊列(帶頭結點) void InitQueue(LinkQueue &Q){ Q.front=Q.rear=(LinkNode*)malloc(sizeof(LinkNode));//隊頭和隊尾指針都指向頭結點 Q.front->next = NULL; } //初始化隊列(不帶頭結點) void InitQueue(LinkQueue &Q){ Q.front=NULL;//隊頭和隊尾指針都指向NULL Q.rear=NULL; } //判斷隊列是否爲空(帶頭結點) bool isEmpty(LinkQueue Q){ if(Q.front==Q.rear){ return true; }else{ return false; } } //判斷隊列是否爲空(不帶頭結點) bool isEmpty(LinkQueue Q){ if(Q.front==NULL){ return true; }else{ return false; } } //入隊(帶頭結點) void EnQueue(LinkQueue &Q,int x){ LinkNode *s = (LinkNode*)malloc(sizeof(LinkNode)); s->data = x; s->next = NULL; Q.rear->next = s;//s插入到rear以後 Q.rear = s;//修改表尾指針 } //入隊(不帶頭結點) void EnQueue(LinkQueue &Q,int x){ LinkNode *s = (LinkNode*)malloc(sizeof(LinkNode)); s->data = x; s->next = NULL; if(Q.front==NULL){//隊頭尾指針指向第一個元素 Q.front = s; Q.rear = s; }else{ Q.rear->next = s;//s插入到rear以後 Q.rear = s;//修改表尾指針 } } //出隊(帶頭結點) bool DeQueue(LinkQueue &Q,int &e)){ if(Q.front==Q.rear){//隊空報錯 return false; } LinkNode *q = Q.front->next;//指針q指向被刪結點 e = q->data; Q.front->next = q->next; if(Q.rear==q){//最後一個結點狀況 Q.rear = Q.front; } free(q); return true; } //出隊(不帶頭結點) bool DeQueue(LinkQueue &Q,int &e)){ if(Q.front==NULL){//隊空報錯 return false; } LinkNode *q = Q.front->next;//指針q指向被刪結點 e = q->data; Q.front = q->next; if(Q.rear==q){//最後一個結點狀況 Q.front=NULL;//隊頭和隊尾指針都指向NULL Q.rear=NULL; } free(q); return true; } int main(int argc, char** argv) { return 0; }