数据结构-队列的示例
一、队列简介
数据结构中的队列是先进先出,如同一根管道一样的数据结构。队列在程序设计中应用比较广泛,比如说处理数据库的并发请求时,要用到队列,虽然有专门的队列处理工具(如:kafka),但是了解队列这样的数据结构还是必要的;还有一种情况就是订单的处理,如果不想遗漏的话,还是需要队列这样的数据结构。
现在的程序设计是B/S结构,前后端设计中,数据库无疑成为了瓶颈,用队列这种数据结构去缓解数据库的并发请求,是实用的应用场景。虽然现在的数据库可以是主从数据库,或者是分布式的,但是请求流量不是均衡的,一天中主要集中在中午和晚上,因为大部分时间请求的用户都在上班,还有各种秒杀,节日等,这种集中爆发式请求,都在考验着后端的数据库。
二、队列的数据结构示例代码如下:
程序在安卓系统下的 Compiler C语言编译器下编译通过。
此程序的队列是链表实现的链式队列,不是线性表实现的。结构体中的 data 代表数据元素,在实际应用中 data 应该是另一个结构体,并且定义数据项,如:姓名、性别、年龄、籍贯等等类似的数据项。
/*程序功能:单链表实现的队列实验示例说明:本程序的入队列和出队列功能全部实现作者:冰雪青松邮箱:946585434@qq.com日期:2022.09.29
*/
#include
#include
#include
#include //自定义数据类型
typedef int ElemType;//定义队列的结构体节点数据类型
typedef struct QNode
{ElemType data;struct QNode* next;
}QNode, *QLinkNode;//定义队列的结构体数据类型
typedef struct LinkQueue
{QNode* head;QNode* tail;
}LinkQueue, *QLink;// LQueue 相当于面向对象的对象
LinkQueue LQueue;// lq指向结构体数据类型实例化后的地址,即指针
LinkQueue * lq = &LQueue;/*功能:初始化队列@param QLink q 自定义结构体数据类型@return void
*/
void InitQueue(QLink q)
{assert(q);q->head = q->tail = NULL;
}/*功能:销毁队列@param QLink q 自定义结构体数据类型@return void
*/
void QDestory(QLink q)
{assert(q);QNode* cur = q->head;while (cur){QNode* next = cur->next;free(cur);cur = next;}q->tail = q->head = NULL;
}/*功能:入队列@param QLink q 自定义结构体数据类型@param ElemType e 自定义结构体数据类型@return void
*/
void QPush(QLink q, ElemType e)
{assert(q);QNode* newNode = (QLinkNode)malloc(sizeof(QNode));if (NULL == newNode){printf("malloc function error\n");exit(-1);}newNode->data = e;newNode->next = NULL;if (q->tail == NULL){assert(q->head == NULL);q->head = q->tail = newNode;}else{q->tail->next = newNode;q->tail = newNode;}}/*功能:出队列@param QLink q 自定义结构体数据类型@return int
*/
int QPop(QLink q)
{int temp;assert(q);//assert(q->head && q->tail);if(q->head == NULL)return 0;if (q->head->next == NULL){temp = q->head->data;free(q->head);q->head = q->tail = NULL;}else{QNode* next = q->head->next;temp = q->head->data;free(q->head);q->head = next;}return temp;
}/*功能:队列是否为空@param QLink q 自定义结构体数据类型@return bool
*/
bool getEmpty(QLink q)
{assert(q);return q->head == NULL;
}/*功能:获取队列第一个数据@param QLink q 自定义结构体数据类型@return ElemType 自定义数据类型
*/
ElemType QFront(QLink q)
{assert(q);assert(q->head);return q->head->data;
}/*功能:获取队列大小@param QLink q 自定义结构体数据类型@return int
*/
int getSize(QLink q)
{assert(q);QNode* cur = q->head;int count = 0;while (cur){cur = cur->next;count++;}return count;
}/*功能:主程序入口@return int
*/
int main(int argc,char** argv)
{//初始化队列InitQueue(lq);//数据入队列QPush(lq, 801);QPush(lq, 802);QPush(lq, 803);QPush(lq, 804);printf("1.队列的第一个数据是:%d\n\n", QFront(lq));printf("2.入队列后的队列大小:%d\n\n", getSize(lq));printf("3.出队列依次输出:\n ");//数据出队列printf("%d, ", QPop(lq));printf("%d, ", QPop(lq));printf("%d, ", QPop(lq));printf("%d, ", QPop(lq));printf("%d, ", QPop(lq));printf("%d", QPop(lq));printf("\n\n4.出队列后的队列大小:%d ", getSize(lq));//数据重新入队列QPush(lq, 805);QPush(lq, 806);//销毁队列QDestory(lq);printf("\n\n5.队列销毁后的数据(显示两个数):%d, %d", QPop(lq),QPop(lq));printf("\n\n6.队列销毁后的队列大小:%d ", getSize(lq));return 0;
}
三、程序执行后的效果:

本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
