数据结构:顺序循环队列

       队列是限制在两端操作进行插入操作与删除操作的线性表,允许进行插入操作的一端称为"队尾",允许进行删除操作的一端称为“队头”。当线性表中没有元素时,称为“空队”。队列的特点是先进先出。

队列两种规定:

1、front指向队头元素的前一个位置,rear指向队尾元素所在位置;

2、front指向队头元素所在位置,rear指向队尾元素的下一个位置;

       以下代码采用第二种规定。

       为区分空队与满队,满队元素个数比数组元素个数少一个,front=rear为空队。

queue.h

/*===============================================
*   文件名称:queue.h
*   创 建 者:cxy     
*   创建日期:2024年01月19日
*   描    述:
================================================*/
#ifndef _QUEUE_H
#define _QUEUE_H#include <stdio.h>
#include <stdlib.h>typedef struct queue{int *arr;   //malloc开辟int len;    //开辟大小int front;  //队头,初始0int rear;   //队尾,初始0
}Queue,*Pqueue;int init(Pqueue *P,int len);
int empty(Pqueue p);
int full(Pqueue p);
int insert_queue(Pqueue p,int data);   //入队,队尾入
int delete_queue(Pqueue p,int *data);   //出队,先入先出,队头出#endif

queue.c

/*===============================================
*   文件名称:queue.c
*   创 建 者:cxy     
*   创建日期:2024年01月19日
*   描    述:
================================================*/
#include "queue.h"int init(Pqueue *P,int len)
{(*P) = malloc(sizeof(Queue));if(NULL == *P){perror("init err:*P");return -1;}(*P)->arr = malloc(sizeof(int)*len);if(NULL == (*P)->arr){perror("init err:(*P)->arr");free(*P);return -1;}(*P)->len = len;(*P)->front = 0;(*P)->rear = 0;return 0;
}int empty(Pqueue p)
{if(NULL == p){perror("empty err:p");return -1;}if(p->front == p->rear)return 1;elsereturn 0;
}int full(Pqueue p)
{if(NULL == p){perror("full err:p");return -1;}if(p->front < p->rear && p->rear+1 == p->len)return 1;else if(p->front > p->rear && p->front-1 == p->rear)return 1;else return 0;
}
int insert_queue(Pqueue p,int data)  //入队,队尾入
{if(NULL == p){perror("insert err:p");return -1;}if(full(p)){perror("insert err:full");return -1;}p->arr[(p->rear++)%p->len] = data;return 0;
}
int delete_queue(Pqueue p,int *data)   //出队,先入先出,队头出
{if(NULL == p){perror("delete err:p");return -1;}if(empty(p)){perror("delete err:empty");return -1;}*data = p->arr[(p->front++)%p->len];return 0;
}

main.c

/*===============================================
*   文件名称:main.c
*   创 建 者:     
*   创建日期:2024年01月19日
*   描    述:
================================================*/
#include "queue.h"int main(int argc, char *argv[])
{ Pqueue p;int data = 0;printf("请输入开辟空间大小:");scanf("%d",&data);init(&p,data);printf("----------empty,1为空---------\n");data= empty(p);printf("%d\n",data);printf("----------full,1为满---------\n");data = full(p);printf("%d\n",data);printf("----------insert_queue----------\n");printf("请输入入队数据 :");scanf("%d",&data);insert_queue(p,data);printf("请输入入队数据 :");scanf("%d",&data);insert_queue(p,data);printf("请输入入队数据 :");scanf("%d",&data);insert_queue(p,data);printf("请输入入队数据 :");scanf("%d",&data);insert_queue(p,data);printf("----------empty,1为空---------\n");data= empty(p);printf("%d\n",data);printf("----------full,1为满---------\n");data = full(p);printf("%d\n",data);printf("----------delete_queue----------\n");delete_queue(p,&data);printf("出队数据为:%d\n",data);delete_queue(p,&data);printf("出队数据为:%d\n",data);delete_queue(p,&data);printf("出队数据为:%d\n",data);delete_queue(p,&data);printf("出队数据为:%d\n",data);printf("----------empty,1为空---------\n");data= empty(p);printf("%d\n",data);printf("----------full,1为满---------\n");data = full(p);printf("%d\n",data);return 0;
} 

结果

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/417287.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

猫咪增肥长壮吃什么猫罐头?5款适合猫咪增肥长壮的猫罐头推荐

近期&#xff0c;我在网络上经常看到网友们热烈讨论关于猫咪增肥长壮的食物选择。许多铲屎官都为自家猫咪的消瘦而苦恼。作为一名拥有六年宠物店经营经验的养猫人&#xff0c;我对猫咪的饮食习惯有着深入的了解。 想要猫咪增肥长壮&#xff0c;高蛋白的猫罐头是一个不错的选择…

L1-058 6翻了(Java)

“666”是一种网络用语&#xff0c;大概是表示某人很厉害、我们很佩服的意思。最近又衍生出另一个数字“9”&#xff0c;意思是“6翻了”&#xff0c;实在太厉害的意思。如果你以为这就是厉害的最高境界&#xff0c;那就错啦 —— 目前的最高境界是数字“27”&#xff0c;因为这…

海思SD3403,SS928/926,hi3519dv500,hi3516dv500移植yolov7,yolov8(9)

上一节yolov8的训练已经完成了,现在要开始做模型的转换了,这里和yolov7方式相似,但是有一些差异,尤其是yolov7的不带NMS部分的输出顺序和yolov8的输出顺序与格式是有差异的。 首先还是要自己手动加入rpn_op,这里包含了filter,sort,nms部分。 我们一个一个看,首先filter.py…

卡萨帝洗衣机:被模仿也是竞争力

如何用一句话形容某家企业的竞争力和领导地位&#xff1f;“某某一出手&#xff0c;就知有没有。”这句话相当匹配。如果再加一条&#xff0c;“被模仿”也恰到好处。 从顶流公司OpenAI&#xff0c;苹果Apple Vision Pro&#xff0c;再到卡萨帝洗衣机&#xff0c;被跟随、模仿…

模型的召回率(Recall)

召回率&#xff08;Recall&#xff09;&#xff0c;也称为灵敏度&#xff08;Sensitivity&#xff09;或真正例率&#xff08;True Positive Rate&#xff09;&#xff0c;是用于评估二分类模型性能的指标之一。召回率衡量了模型正确识别正例的能力&#xff0c;即在所有实际正例…

多行SQL转成单行SQL

如下图所示 将以上多行SQL转成单行SQL 正则表达式如下 (?s)$[^a-zA-Z()0-9]*结果如下 灵活使用,也未必只能使用Sublime Text 提供了一个在线工具

大数据质量管制规范示例

大数据质量管制规范示例 一、前提概要二、相关概念三、管理原则四、治理委员五、应用管理六、查验方式七、考核比率八、扣分标准九、责任划分十、追责范围十一、其它条例十二、总结 一、前提概要 在当今大数据信息时代&#xff0c;大数据平台&#xff08;大数据平台开发规范示…

JVM 如何判断一个对象可以被回收

Hi&#xff0c; 我是 浮生。 今天分享一道一线互联网公司必问的面试题。 ”JVM 如何判断一个对象可以被回收“ 关于这个问题&#xff0c;来看看高手的回答。 一、问题解析 在 JVM 里面&#xff0c;要判断一个对象是否可以被回收&#xff0c;最重要的是判断这个对象是否还在被…

CyclicBarrier带你玩转并发编程

文章目录 1. 技术背景1.1 并发编程简介 2. 解决的问题2.1 并发协同与同步问题2.2 CountDownLatch与CyclicBarrier的区别 3. 使用场景3.1 多线程任务协同3.2 任务分解与合并3.3 数据分析与计算3.4 游戏开发中的同步3.5 生产者-消费者问题 4. 技术点讲解4.1 CyclicBarrier概述4.2…

项目管理工具--禅道

一.禅道的安装 1.1.安装 二.禅道的使用 ​编辑 三.用产品经理的方式登录 3.1添加产品 3.2提需求 3.3添加产品需求 3.4创建项目 ​编辑 四.项目经理方式登录 ​编辑 4.1关联需求 ​编辑 4.2分解任务 五.测试方式登录 5.1测试建立用例 ​编辑 5.2需要换成项…

vue2 使用pdf.js 实现pdf预览,并可复制文本

需求&#xff1a;pdf预览&#xff0c;并且可以选中pdf的内容进行复制。 在ruoyi的vue前端项目中用到&#xff0c;参考了网上不少文章&#xff0c;因为大部分没给具体的pdf.js版本&#xff0c;导致运行过程中报各种api 错误&#xff0c;经过尝试以下版本可用&#xff0c…

文件夹重命名:一次性解决文件夹名称混乱,中文翻译成英文

在我们的日常生活和工作中&#xff0c;文件夹的名称是我们组织和查找文件的重要方式。然而&#xff0c;随着时间的推移&#xff0c;文件夹名称可能会变得混乱不堪&#xff0c;甚至包含中英文混合的情况&#xff0c;这给我们的文件管理带来了极大的不便。那么&#xff0c;如何一…