赞
踩
队列(Queue)简称队,也是和栈一样是一种受限的线性表,只允许在表的一端进行插入,而在表的另一端进行删除。向队列中插入元素称为入队或进队;删除元素称为出队或离队。这和我们日常生活中的排队是一致的,最早排队的也是对早离队的,其操作的特性就是先进先出(First In First Out FIFO)。
队头 (Front) 允许删除的一端,又称队首。
队尾(Rear) 允许插入的一端。
空队列 不含元素的空链表。
- typedef int QDataType;
- typedef struct QueueNode
- {
- int val;
- struct QueueNode* next;
- }QNode;
-
- typedef struct Queue
- {
- QNode* phead;
- QNode* ptail;
- int size;
- }Queue;
- //队列的初始化、销毁
- void QueueInit(Queue* pq);
- void QueueDestroy(Queue* pq);
-
- // 入队列、 出队列
- void QueuePush(Queue* pq, QDataType x);
- void QueuePop(Queue* pq);
-
- //获取队头、队尾元素
- QDataType QueueFront(Queue* pq);
- QDataType QueueBack(Queue* pq);
-
- //判断队列是否为空
- bool QueueEmpty(Queue* pq);
-
- //获取队列元素个数
- int QueueSize(Queue* pq);
- void QueueInit(Queue* pq)
- {
- pq->phead = NULL;
- pq->ptail = NULL;
- pq->size = 0;
- }
输出:
- void QueueDestroy(Queue* pq)
- {
- assert(pq);
- QNode* cur = pq->phead;
- while (cur)
- {
- QNode* next = cur->next;
- free(cur);
- cur = next;
- }
- pq->phead = pq->ptail = NULL;
- pq->size = 0;
- }
销毁:
- void QueuePush(Queue* pq, QDataType x)
- {
- assert(pq);
- QNode* Newnode = (QNode*)malloc(sizeof(QNode));
- if (Newnode == NULL)
- {
- perror("malloc error");
- exit(-1);
- }
- Newnode->next = NULL;
- Newnode->val = x;
- if (pq->ptail)
- {
- pq->ptail->next = Newnode;
- pq->ptail = Newnode;
- }
- else
- {
- pq->phead = pq->ptail = Newnode;//当最开始的时候我们让phead,ptail指针都指向Newnode
- }
- pq->size++;
- }
输出:
- void QueuePop(Queue* pq)
- {
- assert(pq);
- assert(pq->phead != NULL);
-
- // 一个节点
- if (pq->phead->next == NULL)
- {
- free(pq->phead);
- pq->phead = pq->ptail = NULL;
- }
- // 多个节点
- else
- {
- QNode* next = pq->phead->next;
- free(pq->phead);
- pq->phead = next;
- }
-
- pq->size--;
- }
输出:
- QDataType QueueFront(Queue* pq)
- {
- return pq->phead->val;
- }
输出:
- QDataType QueueBack(Queue* pq)
- {
- return pq->ptail->val;
- }
输出:
- int QueueSize(Queue* pq)
- {
- return pq->size;
- }
输出:
- bool QueueEmpty(Queue* pq)
- {
- if (pq->ptail == NULL)
- {
- return false;
- }
- else
- {
- return true;
- }
- }
输出:
队列是一种遵循先进先出(FIFO)受限的线性数据结构。元素从队列的尾部添加,从队列的头部移除。队列通常用于模拟现实世界中按到达顺序处理项目的场景。
栈是一种遵循后进先出(LIFO)受限的线性数据结构。元素从栈的顶部添加,从栈的顶部移除。栈通常用于实现涉及回溯或解决递归问题的算法。
队列和栈是基础数据结构,具有不同的特性和应用。队列适用于按顺序管理项,而栈适用于实现涉及回溯或解决递归问题的算法。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。