文章目录
1、认识队列

队列的一大特点就是先进先出,后如后出。队列是有序的,从头出,从尾入。
一个很形象的应用就是医院的挂号机,有序的每次叫队列队头的号码,机器每次从记录的队尾加数据。
2、队列实现
一个队列需要实现的操作如下。
- 入队
- 出队
- 查看队头
- 查看队尾
- 计算队长度
结构的选择有顺序表和链表,从优缺点来看。
- 入队,顺序表和链表尾插的效率都一样,但在空间上链表更好,不会浪费空间。
- 出队,顺序表头删的效率低于链表头删的效率。
- 查看队头,都比较容易。
- 查看队尾,顺序表比较容易,链表需要遍历在尾部查看,如果没有建立尾指针的话。
- 计算对长度,顺序表本身记录了,链表需要遍历计算。
似乎都有自己擅长的领域,那么都实现一遍吧。
3、非循环队列单链表写法
3.1、测试页和头文件
为了在实现一些功能上更加的便利,在创建队列的结构体中创建头尾指针变量,以及一个size记录长度。
头文件中
//Queue.h
#pragma once
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
#include<stdbool.h>
typedef int QDataType;
typedef struct QueueNode
{
struct QueueNode* next;
QDataType data;
}QueueNode;
//队列结构体 有效避免二级指针
typedef struct Queue
{
QueueNode* front;
QueueNode* tail;
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);
//队列大小
int QueueSize(Queue* pq);
//判空
bool QueueEmpty(Queue* pq);
测试文件中
//Test.c
#include"Queue.h"
void QueueTest1()
{
Queue p;
QueueInit(&p);
QueuePush(&p, 1);
QueuePush(&p, 2);
QueuePush(&p, 3);
///*QueuePop(&p);
//QueuePop(&p);
//QueuePop(&p);*/
printf("%d\n", QueueSize(&p));
while (!QueueEmpty(&p))
{
printf("%d ",QueueFront(&p));
QueuePop(&p);
}
QueueDestroy(&p);
}
int main()
{
QueueTest1();
return 0;
}
3.2、接口函数的实现
队列的函数实现比较容易
#include"Queue.h"
//初始化队列
void QueueInit(Queue* pq)
{
assert(pq);
pq->front = NULL;
pq->tail = NULL;
pq->size = 0;
}
//销毁队列
//从头到尾一次一个结点销毁
void QueueDestroy(Queue* pq)
{
assert(pq);
QueueNode* p = pq->front;
while (p)
{
QueueNode* cur = p;
p = p->next;
free(cur);
}
pq->front = NULL;
pq->tail = NULL;
pq->size = 0;
}
//入队
void QueuePush(Queue* pq, QDataType x)
{
assert(pq);
//先创建新结点
QueueNode* newnode = (QueueNode*)malloc(sizeof(QueueNode));
if (newnode == NULL)
{
perror("malloc fail");
exit(-1);
}
newnode

本文详细介绍了队列的概念和特性,包括先进先出的原则,并展示了非循环队列和循环队列的实现,涵盖了单链表和顺序表两种数据结构。在单链表实现中,队列的初始化、入队、出队、查看队头和队尾以及计算队列长度等操作得到了实现。而在顺序表实现中,特别讨论了扩容和循环的效果。最后,文章探讨了循环队列的实现,包括链表和顺序表的循环逻辑,以及如何处理队列的满和空状态。
最低0.47元/天 解锁文章
1153

被折叠的 条评论
为什么被折叠?



