队列的实现-链表
像栈一样,队列也是表。然而,使用队列时插入在一端进行,删除在另一端进行。
队列的基本操作是Enqueue(入队),它是在表的末端(叫做队尾),和Dequeue(出队),它是删除在表头的元素(叫做对头)。
上代码:
typedef int ElementType; struct QueueRecord; typedef struct QueueRecord *Queue; struct QueueRecord { int capability;//队列可容纳长度 int head;//对头 int tail;//队尾 int size;//队列的实际长度 ElementType *Array; };
当在队尾增加一个元素时,tail+1;
当对头删除一个元素是,head+1;
当tail,head移到数组最后一个位置后,下一次将重新移到数组开始的地方。
int Isempty( Queue Q ) { return Q->size == NULL; } int IsFull( Queue Q ) { return Q->size == Q->capability; } Queue CreateQueue( int MaxElements ) { Queue queue = (Queue)malloc(sizeof(struct QueueRecord)); queue->capability = MaxElements; queue->head = 1;//初始化队列。tail始终指向队尾的元素,开始时没有元素指向0.当有一个元素时,指向1,此时head就正好也指向第一个元素。 queue->tail = 0; queue->size = 0; queue->Array = (ElementType*)malloc(sizeof(ElementType)*MaxElements); return queue; } /*入队列*/ void Enqueue(ElementType X, Queue Q ) { if(!IsFull(Q)) { Q->tail=(++Q->tail)%Q->capability; Q->Array[Q->tail] = X; Q->size++; } else printf("queue is full!"); } /*出队列*/ void Dequeue( Queue Q ) { if(!Isempty(Q)) { Q->head = (++Q->head) % Q->capability; Q->size--; } else printf("queue is empty!"); } /*返回队列的第一个元素值*/ ElementType Front( Queue Q ) { return Q->Array[Q->head]; }

浙公网安备 33010602011771号