目录
一、队列概念
先进先出,后进后出
第一个元素无数据
数组队列长度 -- 根据数组长度决定
链表队列长度 -- 根据电脑内存决定
二、基础数组队列
#include <stdio.h>
#include <malloc.h>
// 队列: 先进先出,后进后出
// 循环队列 -- 数组
// 最大存储个数 MAXSIZE-1
// 队列第一个无数据
// 队空:queue->front == queue->rear
// 队满:(queue->rear + 1) % MAXSIZE == queue->front
#define MAXSIZE 3
typedef struct {
int data[MAXSIZE];
// 头指针
int front;
// 尾指针
int rear;
}SqQueue;
int main()
{
int inData = 100;
int outData = 0;
// 定义队列指针
SqQueue* queue;
// 申请队列内存
queue = (SqQueue*)malloc(sizeof(SqQueue));
// 头尾指针初始化
queue->front = queue->rear = 0;
// 入队
if ((queue->rear + 1) % MAXSIZE == queue->front)
{
printf("队列已满,入队失败\n");
}
else
{
queue->rear = (queue->rear + 1) % MAXSIZE;
queue->data[queue->rear] = inData;
printf("%d\n", queue->data[queue->rear]);
}
// 出队
if (queue->front == queue->rear)
{
printf("队列已空,出队失败\n");
}
else
{
queue->front = (queue->front + 1) % MAXSIZE;
outData = queue->data[queue->front];
printf("%d\n", outData);
}
}
三、基础链表队列
#include <stdio.h>
#include <malloc.h>
/// <summary>
/// 链表队列: 先进先出,后进后出
/// 第一个元素无数据
/// 队列长度根据电脑内存为准
///
/// 队空:queue->front == queue->rear
/// 队满:p == NULL
/// </summary>
typedef struct QNode
{
int data;
struct QNode* next;
}QNode,*QueuePtr;
typedef struct
{
QueuePtr front, rear;
}LinkQueue;
int main()
{
int inData = 100;
int outData = 0;
// 定义队列
LinkQueue* queue;
// 定义节点
QNode* node;
// 队列<头指针>申请内存
queue = (LinkQueue*)malloc(sizeof(LinkQueue));
// 队列<头节点>申请内存
node = (QNode*)malloc(sizeof(QNode));
// 队列初始化
node->next = NULL;
// 头尾指针指向第一个节点
queue->front = queue->rear = node;
//--------------------------------------------------------
#pragma region 入队
QNode* p;
//创建新节点
p = (QNode*)malloc(sizeof(QNode));
if (p == NULL)
{
printf("电脑内存不足,申请失败\n");
}
p->data = inData;
p->next = NULL;
// 新节点 入队
queue->rear->next = p;
// 队列尾指针指向 新节点
queue->rear = p;