队列的链式优势是不用考虑队满状况。代码以下: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; }