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

数据结构9:队列

文章目录

  • 简介
  • 队列的数据结构和API函数:
    • 队列生成函数:
    • 队列销毁函数:
    • 队列清空函数:
    • 队列长度获取函数:
    • 队列空检测函数:
    • 队列满检测函数:
    • 元素入队列函数:
    • 元素出队列函数:

简介

队列是一种类似于单向隧道一样的数据结构,数据只能从一端进入,然后从另一端输出,先进入的先弹出,后进入的后弹出。
入队列:向队列中添加元素的操作叫做入队列,如图1所示。
在这里插入图片描述
出队列:从队列中取出元素的操作叫做出队列,如图2所示。
在这里插入图片描述

队列的数据结构和API函数:

我们教程中的队列是以线性表为基础实现的,因此队列的数据结构与线性表是一样的,队列的API也是在线性表的基础上实现的。队列就是只允许在最前端插入元素,在最尾端取出元素的线性表。为了简单方便,我们以单向链表为基础实现队列及其API函数。
队列的数据结构

//将List类型定义为Queue
typedef List Queue;

队列生成函数:

Queue *QueueCreate()
{//定义一个Queue类型的指针Queue *temp = NULL;//利用ListCreate给分配队列空间temp = (Queue *)ListCreate();//返回队列指针return temp;
}

应用代码

Queue *myqueue = NULL;
//建立一个栈
myqueue = QueueCreate();

队列销毁函数:

int QueueDestroy(Queue **queue)
{int ret;//利用ListDestory销毁Queueret = ListDestory(queue);//返回操作的结果return ret;
}

应用代码:

QueueDestroy(&myqueue);

队列清空函数:

int QueueClear(Queue *queue)
{int ret;//利用ListClear清空Queueret = ListClear(queue);//返回操作的结果return ret;
}

应用代码:

QueueClear(&mystack);

队列长度获取函数:

int QueueGetlen(Queue *queue)
{int ret;//利用ListGetLength获取队列长度ret = ListGetLength(queue);//返回队列的长度return ret;
}

应用代码:

len = QueueGetlen(myqueue);

队列空检测函数:

int QueueEmpty(Queue *queue)
{int len;//获取队列的长度len = QueueGetlen(queue);//如果长度为0,说明队列为空,返回1if (len == 0){return 1;}return 0;
}

应用代码:

printf("QueueEmpty:%d\n", QueueEmpty(myqueue));

队列满检测函数:

int QueueFull(Queue *queue)
{int len;len = QueueGetlen(queue);if (len == xx){return 1;}return 0;
}

队列满函数与队列空函数类似,也是根据长度来判断的,因为我们使用的线性表是单向链表,元素可以动态地增加,因此无法判断其何时为满;当采用的线性表为顺序表时,该函数才有意义;也可以自己设定一个最大长度,当队列内元素等于该值时,无法插入元素,从而实现队列满,本文对此不做过多阐述。

元素入队列函数:

int QueueIn(Queue *queue, int data)
{int ret;//利用ListAdd在队列首部插入元素ret = ListAdd(queue, 0, data);//返回操作的结果return ret;
}

应用代码:

for (i = 0; i < 5; i++)
{QueueIn(myqueue, i);
}

元素出队列函数:

int QueueOut(Queue *queue)
{int ret;int data;//判断长度是否为空if (QueueEmpty(queue) == 1){return -1;}//利用ListDelete在队列尾部取出元素ret = ListDelete(queue, QueueGetlen(queue) -1, &data);//如果操作无误,返回数据,否则返回-1if (ret == 0){return data;}return -1;
}

应用代码:

for (i = 0; i < 5; i++)
{printf("%d:%d\n", i, QueueOut(myqueue));
}
http://www.dtcms.com/a/511690.html

相关文章:

  • 逆向分析星星充电APP:从签名生成到数据深度解析
  • Vue + WebApi 实现上传下载功能
  • 建设门户网站预算做旅游网站多少钱
  • 【Rust创作】Rust 错误处理:从 panic 到优雅控制
  • 常见激活函数的Lipschitz连续证明
  • 专做皮具的网站网站建设公司排行榜
  • 第三次面试:C++实习开发
  • 公司网站内容更新该怎么做wordpress显示目录
  • 边界扫描测试原理 2 -- 边界扫描测试设备的构成
  • 如何入侵网站后台晴天影视
  • Linux top 命令使用说明
  • 研发图文档管理的革新:从无序到智能协同
  • springboot点餐系统的设计与实现(代码+数据库+LW)
  • ArcoDesignVue Select组件分离问题
  • Python开发:接口场景设计
  • 汽车网站flash模板定制高端网站建设
  • 【Ubuntu18.04 D435i RGB相机与IMU标定详细版(三)】
  • 单肩包自定义页面设计模板seo关键词优化软件app
  • 朊病毒检测市场:技术突破与公共卫生需求驱动下的全球增长
  • 思维清晰的基石:概念和命题解析
  • ubuntu中替换python版本
  • mybatis请求重试工具
  • 高速运放输入引脚并联电阻太小会怎样?
  • vue前端面试题——记录一次面试当中遇到的题(10)
  • 有没有做高仿手表的网站php网站地图
  • wordpress提交百度站长中建装饰集团有限公司官网
  • 牛客网 AI题​(一)机器学习 + 深度学习
  • 第一例:石头剪刀布的机器学习(xedu,示例15)
  • 【AI论文】D2E:基于桌面数据扩展视觉-动作预训练规模,以迁移至具身人工智能领域
  • 机器学习和深度学习模型训练流程