隊列不同於棧,它是先進先出,即先入隊列的元素提取時也要先出隊列。隊列可以用數組實現也可以用鏈表實現,挺簡單的,但是很有些情況下很有用。它的實現只要維持好隊首和隊尾指針就好了。下面是我實現的鏈表隊列。
queue.h
#ifndef __QUEUE_H #define __QUEUE_H #include#include struct QueueNode; struct queue; typedef Vertex ElementType; typedef struct QueueNode *Node; typedef struct queue *Queue; struct QueueNode { ElementType element; Node next; }; struct queue { Node first; Node last; }; Queue createQueue(); int isEmpty(Queue Q); void EnQueue(ElementType X,Queue Q); ElementType DeQueue(Queue Q); void deleteQueue(Queue Q); #endif
#include queue.h Queue createQueue() { Queue Q; Node node; node=(Node)malloc(sizeof(struct QueueNode)); if(node==NULL) { printf(out of space ); exit(-1); } node->next=NULL; Q=(Queue)malloc(sizeof(struct queue)); if(Q==NULL) { printf(out of space ); exit(-1); } Q->first=node; Q->last=node; return Q; } int isEmpty(Queue Q) { if(Q->first==Q->last) return 1; else return 0; } void EnQueue(ElementType X,Queue Q) { Node node; node=(Node)malloc(sizeof(struct QueueNode)); if(node==NULL) { printf(out of space ); exit(-1); } node->element=X; node->next=NULL; Q->last->next=node; Q->last=node; } ElementType DeQueue(Queue Q) { ElementType x; Node p; if(isEmpty(Q)) { printf(queue is empty ); exit(-1); } p=Q->first->next; Q->first->next=p->next; x=p->element; if(p==Q->last) { Q->last=Q->first; } free(p); return x; } void deleteQueue(Queue Q) { while(!isEmpty(Q)) { DeQueue(Q); } }