版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/a1135004584/article/details/79460662
队列:类似现实生活中的队列,队列所具有的特点是先进先出。
图示:
队列元素 1 2
1 | 2 |
入列 3
1 | 2 | 3 |
出列 1
2 | 3 |
出列 2
3 |
c语言实现:
实现代码:
queue.h
#ifndef _QUEUE_H_ #define _QUEUE_H_ #include <glob.h> #include <stdbool.h> #define QUQUE_LENGTH 100 typedef int elementType; typedef enum{ ERROR,SUCCESS }Status; typedef struct{ int queueLength; //队列长度 int front;//队列头 int rear;//队列尾 elementType queueArray[QUQUE_LENGTH]; }Queue; void initQueue(Queue *queue); void destroyQueue(Queue *queue); void clearQueue(Queue *queue); bool queueIsEmpty(Queue *queue); int queueLength(Queue *queue); Status getHead(Queue *queue,int *head); Status enQueue(Queue *queue,const elementType *element);//进入队列 Status deQueue(Queue *queue,elementType *element);//出队列 void queueTraverse(Queue *queue,void(*pfun)(const elementType *e)); #endif
queue.c
#include <malloc.h> #include <stdbool.h> #include "queue.h" void initQueue(Queue *queue) { queue->queueLength = 0; queue->front=queue->rear = 0; } /** * 销毁队列 * @param queue */ void destroyQueue(Queue *queue) { queue->queueLength = 0; queue->front=queue->rear; } /** * 清空队列 */ void clearQueue(Queue *queue) { queue->queueLength = 0; queue->front=queue->rear = 0; } bool queueIsEmpty(Queue *queue) { if(queue->front == queue->rear) return true; else return false; } int queueLength(Queue *queue) { return queue->queueLength; } Status getHead(Queue *queue,int *head) { if(queue){ *head = queue->front; return SUCCESS; }else{ return ERROR; } } Status enQueue(Queue *queue, const elementType *element)//进入队列 { if(queue && queue->rear < QUQUE_LENGTH){ queue->queueArray[queue->rear++] = *element; queue->queueLength++; return SUCCESS; }else return ERROR; } Status deQueue(Queue *queue,elementType *element)//出队列 { if(queue && queue->front < queue->rear) { *element = queue->queueArray[queue->front++]; queue->queueLength--; return SUCCESS; } else return ERROR; } void queueTraverse(Queue *queue,void(*pfun)(const elementType *e)) { if(queue->front < queue->rear) { int i = queue->front; for(;i<queue->rear;i++) pfun(&queue->queueArray[i]); } }
main.c
#include <stdio.h> #include "queue.h" void pfun(const int *ele) ; int main() { Queue queue; initQueue(&queue); int i = 1; enQueue(&queue,&i); enQueue(&queue,&i); enQueue(&queue,&i); deQueue(&queue,&i); queueTraverse(&queue, pfun); return 0; } void pfun(const int *ele) { printf("%d ",*ele); }