💨队列的概念及结构
✔概念
只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表。
队列具有先进先出的特点。
✔结构
入队列:进行插入操作的一端称为队尾
出队列:进行删除操作的一端称为队头
💨队列的实现
💨初始化
voidQueueInit(Queue*pq) //初始化{ assert(pq); pq->head=pq->tail=NULL; }
voidQueuePush(Queue*pq, QDataTypex) //队尾入{ assert(pq); QNode*newnode= (QNode*)malloc(sizeof (QNode)); if(newnode==NULL) { printf("malloc fail\n"); exit(-1); } newnode->data=x; newnode->next=NULL; if(pq->tail==NULL) { pq->head=pq->tail=newnode; } else { pq->tail->next=newnode; pq->tail=newnode; } }
💨出队列
voidQueuePop(Queue*pq) //队头出{ assert(pq); assert(pq->head); if(pq->head->next==NULL) { free(pq->head); pq->head=pq->tail=NULL; } else { QNode*next=pq->head->next; free(pq->head); pq->head=next; } }
💨取队头数据
//取队头的数据QDataTypeQueueFront(Queue*pq) { assert(pq); assert(pq->head); returnpq->head->data; }
💨取队尾数据
1.//取队尾的数据QDataTypeQueueBack(Queue*pq) { assert(pq); assert(pq->head); returnpq->tail->data; }
💨取数据的个数
intQueueSize(Queue*pq)//取数据个数{ assert(pq); intsize=0; QNode*cur=pq->head; while (cur) { ++size; cur=cur->next; } returnsize; }
💨判断队列是否为空
boolQueueEmpty(Queue*pq) //判断是否为空{ assert(pq); returnpq->head==NULL; }
💨销毁队列
voidQueueDestory(Queue*pq) //销毁一个队列{ assert(pq); QNode*cur=pq->head; while(cur) { QNode*next=cur->next; free(cur); cur=next; } pq->head=pq->tail=NULL; }
💨队列头文件Queue.h
typedefintQDataType; typedefstructQueueNode{ structQueueNode*next; QDataTypedata; }QNode; typedefstructQueue{ QNode*head; //头QNode*tail; //尾}Queue; voidQueueInit(Queue*pq); //初始化voidQueueDestory(Queue*pq); //销毁一个队列voidQueuePush(Queue*pq, QDataTypex); //队尾入voidQueuePop(Queue*pq); //队头出//取队头的数据QDataTypeQueueFront(Queue*pq); //取队尾的数据QDataTypeQueueBack(Queue*pq); intQueueSize(Queue*pq);//取数据个数boolQueueEmpty(Queue*pq); //判断是否为空