当前位置: 首页 > news >正文

[数据结构]6. 队列-Queue

队列-Queue

  • 1. 介绍
  • 2. 队列实现
    • 2.1 基于链表的实现
    • 2.2 基于数组的实现
  • 3. 队列操作
    • Create
    • Initialize
    • Destory
    • Push
    • Pop
    • Front
    • Back
    • Size
    • Empty

1. 介绍

队列(queue) 是一种遵循先入先出规则的线性数据结构。将队列头部称为“队首”,尾部称为“队尾”,将把元素加入队尾的操作称为“入队”,删除队首元素的操作称为“出队”。
请添加图片描述

2. 队列实现

2.1 基于链表的实现

请添加图片描述请添加图片描述
请添加图片描述

2.2 基于数组的实现

请添加图片描述请添加图片描述
请添加图片描述

3. 队列操作

Create

typedef int QDataType;
typedef struct QueueNode
{struct QueueNode* next;QDataType data;
}QNode;typedef struct Queue
{QNode* phead;QNode* ptail;int size;
}Queue;

Initialize

void QueueInit(Queue* pq) {assert(pq);pq->phead = NULL;pq->ptail = NULL;pq->size = 0;
}

Destory

void QueueDestory(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;
}

Push

void QueuePush(Queue* pq, QDataType x) {assert(pq);QNode* newnode = (QNode*)malloc(sizeof(QNode));if (newnode == NULL) {perror("malloc fail\n");return;}newnode->data = x;newnode->next = NULL;if (pq->ptail == NULL) {assert(pq->phead == NULL);pq->phead = pq->ptail = newnode;}else {pq->ptail->next = newnode;pq->ptail = newnode;}pq->size++;
}

Pop

void QueuePop(Queue* pq) {assert(pq);assert(!QueueEmpty(pq));// one nodeif (pq->phead->next == NULL) {free(pq->phead);pq->phead = pq->ptail = NULL;}// more nodeelse {QNode* next = pq->phead->next;free(pq->phead);pq->phead = next;}pq->size--;
}

Front

QDataType QueueFront(Queue* pq) {assert(pq);assert(!QueueEmpty(pq));return pq->phead->data;
}

Back

QDataType QueueBack(Queue* pq) {assert(pq);assert(!QueueEmpty(pq));return pq->ptail->data;
}

Size

int QueueSize(Queue* pq) {assert(pq);return pq->size;
}

Empty

bool QueueEmpty(Queue* pq) {assert(pq);//return pq->phead == NULL && pq->ptail == NULL;return pq->size == 0;
}

相关文章:

  • C++学习细节回顾(汇总二)
  • 【交互 / 差分约束】
  • AD 规则的使能及优先级的设置
  • 机密虚拟机的威胁模型
  • Java 与 Go 语言对比
  • 【 Java开发枚举值规范】
  • NACOS基于长链接的⼀致性模型
  • 从Transformer到多模态智能,剖析人工智能时代的核心引擎​​
  • 在Linux中如何使用Kill(),向进程发送发送信号
  • 编程题 03-树2 List Leaves【PAT】
  • 为什么要选择七彩喜数字康养平台?加盟后有何优势?
  • Oracle版本、补丁及升级(12)——补丁及补丁集
  • 2011-2020年各省粗离婚率数据
  • 解密企业级大模型智能体Agentic AI 关键技术:MCP、A2A、Reasoning LLMs- consistency is the key
  • AI时代的弯道超车之第十二章:英语和编程重要性?
  • 动态规划问题 -- 多状态模型(删除并获得点数)
  • MySQL之基础索引
  • 第二十九节:直方图处理-直方图均衡化
  • Made with Unity | 拓展“双点”宇宙版图
  • 【Python3教程】Python3基础篇之输入与输出
  • 警方通报男子广州南站持刀伤人:造成1人受伤,嫌疑人被控制
  • 坚持吃素,是不是就不会得高血脂了?
  • 外企聊营商|威能集团:公平环境增“暖”意
  • 泽连斯基:将带领乌代表团前往土耳其,已准备好与普京会谈
  • 习近平出席中国-拉美和加勒比国家共同体论坛第四届部长级会议开幕式并发表重要讲话
  • 英国首相斯塔默住所起火,警方紧急调查情况