由于线性存储结构有顺序存储和链式存储两种,而队列是一种特殊的线性结构,所以,队列自然也会有链式存储结构,这种存储结构,称之为“链队列”。只不过,这种结构需要两个指针,一个指针指向队列的头部,一个指针指向队列的尾部。虽然队列采用了链式存储这种方式,但是它本质上仍然是队列,因此,只要是队列,就要遵循:只允许在队列的头部进行删除操作,只允许在队里的尾部进行插入操作。那么,先来定义个链队列结构:

typedefintQElemType;typedefstructQNode{QElemTypedata;structQNode*next;}QNode,*QueuePtr;typedefstruct{QueuePtrfront,rear;}LinkQueue;

有了队列这种结构后,就可以进行队列元素的插入操作了。

StatusEnQueue(LinkQueue*Q,QElemTypee){QueuePtrs=(QueuePtr)malloc(sizeof(structQNode));if(!s)exit(OVERFLOW);s->data=e;s->next=NULL;Q->rear->next=s;Q->rear=s;returnOK;}

同样的,元素的删除操作。

StatusDeQueue(LinkQueue*Q,QElemType*e){QueuePtrp;if(Q->front==Q->rear)returnERROR;p=Q->front->next;*e=p->data;Q->front->next=p->next;if(Q->rear==p)Q->rear=Q->front;free(p);returnOK;}