网站建设 蜀美网络,百度seo排名优化是什么,万户网络公司怎么样,1做网站文章目录 前言一、队列基本变量的了解二、队列的基本操作2.1队列的初始化#xff08;QueueInit#xff09;2.2入队#xff08;QueuePush#xff09;2.3判断是否为空队#xff08;QueueEmpty#xff09;2.4出队#xff08;QueuePop#xff09;2.5队列的队头数据#xf… 文章目录 前言一、队列基本变量的了解二、队列的基本操作2.1队列的初始化QueueInit2.2入队QueuePush2.3判断是否为空队QueueEmpty2.4出队QueuePop2.5队列的队头数据QueueFront2.6队列的队尾数据QueueBack2.7队列大小QueueSize2.8队列的销毁QueueDestroy 前言 提示以下是本篇文章正文内容下面案例可供参考 队列只允许在一端进行插入数据操作在另一端进行删除数据操作的特殊线性表队列具有先进先出FIFO(First In First Out) 入队列进行插入操作的一端称为队尾出队列进行删除操作的一端称为队头
队列也可以数组和链表的结构实现使用链表的结构实现更优一些因为如果使用数组的结构出队列在数组头上出数据效率会比较低。
一、队列基本变量的了解 typedef int QDataType;//队列数据类型typedef struct QueueNode {QDataType data;//数据域struct QueueNode* next;//指针域
}QNode;//先建立一个结点typedef struct Queue {QNode* head;//头QNode* tail;//尾int size;//队列数量
}Queue;//将头与尾还有数量封装在一起能更好操作
二、队列的基本操作
2.1队列的初始化QueueInit
void QueueInit(Queue* pq) {assert(pq);pq-head pq-tail NULL;//刚开始没有数据所以头尾都为NULLpq-size 0;//数量
}2.2入队QueuePush void QueuePush(Queue* pq,QDataType x) {assert(pq);QNode* newnode (QNode*)malloc(sizeof(QNode));if (newnode NULL) {perror(malloc error);return;}//判断是否为有效空间newnode-data x;newnode-next NULL;//初始化新结点if (pq-head NULL) {assert(!pq-tail);pq-head pq-tail newnode;//之所以要分开判断是因为//我们也要保证只有一个数据时//head与tail指向同一个//如果只有else虽然也能够正常插入//但是tail一直指向NULL}else {pq-tail-next newnode;//在尾巴后面接上也就是入队pq-tail pq-tail-next;//尾巴改变指向新加入的数据}pq-size;//数据1
}2.3判断是否为空队QueueEmpty
bool QueueEmpty(Queue* pq) {assert(pq);return pq-size0;//数量为0返回为真真为空假为不空
}2.4出队QueuePop void QueuePop(Queue* pq) {assert(pq);assert(!QueueEmpty(pq));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;//队头指向下一个位置}pq-size--;//数量减少
}2.5队列的队头数据QueueFront
QDataType QueueFront(Queue* pq) {assert(pq);assert(!QueueEmpty(pq));//判断是否为空队列return pq-head-data;//直接去队头数据
}2.6队列的队尾数据QueueBack
QDataType QueueBack(Queue* pq) {assert(pq);assert(!QueueEmpty(pq));//判断是否为空队列return pq-tail-data;
}2.7队列大小QueueSize
int QueueSize(Queue* pq) {assert(pq);return pq-size;
}
2.8队列的销毁QueueDestroy void QueueDestroy(Queue* pq) {assert(pq);QNode* cur pq-head;//记录当前结点while (cur) {QNode* Next cur-next;//当前结点的下一个结点free(cur);//释放当前节点cur Next;//让当前结点指向下一个结点}pq-head pq-tail NULL;//最后头尾都NULLpq-size 0;
}