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

队列的实现

1.队列的概念

队列:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先出FIFO(First In First Out)
入队列:进行插入操作的一端称为队尾 出队列:进行删除操作的一端称为队头

2.队列的实现

1.初始化

2.销毁

3.队尾入队列

4.队头出队列

5.获取队列头部元素

6.获取队列尾部元素

7.有效元素个数

8.判是否为空

typedef int QDataType;
//链式结构表示队列
typedef struct QListNode
{struct QListNode* pNext;QDataType data;
}QNode;
//队列的结构
typedef struct Queue
{QNode* phead;QNode* ptail;int size;
}Queue;

2.1 初始化与销毁

void QueueInit(Queue* pq)
{assert(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 = NULL;pq->ptail = NULL;pq->size = 0;
}

2.2 队尾入队列与队头出队列

//队尾入队列
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->phead == NULL){assert(pq->ptail == NULL);pq->phead = pq->ptail = newnode;}else{pq->ptail->next = newnode;pq->ptail = newnode;}pq->size++;
}
//队头出队列
void QueuePop(Queue* pq)
{assert(pq);assert(!QueueEmpty(pq));//分类讨论//1.一个节点             2.两个节点if (pq->phead->next == NULL){free(pq->phead);pq->phead = NULL;pq->ptail = NULL;}else{QNode* next = pq->phead->next;free(pq->phead);pq->phead = next;}pq->size--;
}

2.3 获取队列头部元素与获取队列尾部元素

//获取队列头部元素
QDataType QueueFront(Queue* pq)
{assert(pq);assert(!QueueEmpty(pq));return pq->phead->data;
}
//获取队列尾部元素
QDataType QueueBack(Queue* pq)
{assert(pq);assert(!QueueEmpty(pq));return pq->ptail->data;
}

2.4 有效元素个数与判是否为空

//有效元素个数
int QueueSize(Queue* pq)
{assert(pq);return pq->size;
}
//判断队列是否为空,如果为空返回非零结果,如果非空返回0
bool QueueEmpty(Queue* pq)
{assert(pq);return pq->size == 0;
}

http://www.lryc.cn/news/122729.html

相关文章:

  • Node + Express 后台开发 —— 起步
  • Python学习笔记第五十七天(Pandas 数据清洗)
  • Elasticsearch的一些基本概念
  • Guitar Pro8专业版吉他学习、绘谱、创作软件
  • SpringBoot复习(39)Servlet容器的自动配置原理
  • 【前端 | CSS】盒模型clientWidth、clientHeight、offsetWidht、offsetHeight
  • Django 高级指南:深入理解和使用类视图和中间件
  • 《C语言深度解剖》.pdf
  • 【小梦C嘎嘎——启航篇】string介绍以及日常使用的接口演示
  • 多个 Github 账户访问 Github
  • c#实现命令模式
  • Kubernetes的默认调度和自定义调度详解
  • 使用Spring-Security后,浏览器不能缓存的问题
  • 中睿天下入选河南省网信系统2023年度网络安全技术支撑单位
  • 代码随想录day44 45 46
  • 一探Linux下的七大进程状态
  • 香港站群服务器为什么适合seo优化?
  • 虚拟机内搭建CTFd平台搭建及CTF题库部署,局域网内机器可以访问
  • qq录屏怎么弄?手把手教会你!
  • 一文读懂c++语言
  • BERT数据处理,模型,预训练
  • Oracle将与Kubernetes合作推出DevOps解决方案!
  • 微服务与Nacos概述-4
  • Streamlit 讲解专栏(九):深入探索布局和容器
  • 使用cloud-int部署nginx
  • 定量分析计算51单片机复位电路工作原理 怎么计算单片机复位电容和电阻大小
  • 消息队列相关面试题
  • 33 | 美国总统数据分析
  • 每日一题之常见的排序算法
  • JVM 类加载和垃圾回收