首页 > 其他分享 >队列的实现

队列的实现

时间:2024-05-06 23:12:13浏览次数:31  
标签:CirQueue 下标 队列 实现 Manager 循环 return

/********************************************************************************************************
*
*	file name:	Zqh_队列实现.c
* 	author	 :	[email protected]
* 	date	 :	2024/05/05
* 	function :	实现队列的增删改查
*	note	 :	模板
*	
*  Copyright (c)  2023-2024   [email protected]    All right Reserved
* ******************************************************************************************************/


#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>




//指的是循环队列中的元素的数据类型,用户可以根据需要进行修改
typedef int  DataType_t;

//构造记录循环队列CircularQueue各项参数(循环队列的首地址 + 循环队列的容量 + 循环队列队尾下标+队首下标)的结构体
typedef struct CircularQueue
{
	DataType_t * Addr;		//记录循环队列首地址
	unsigned int Size;		//记录循环队列的容量
	int			 Rear;      //循环队列队尾下标	
	int			 Front;     //循环队列队首下标

}CirQueue_t;


//创建循环队列并对循环队列进行初始化
CirQueue_t * CirQueue_Create(unsigned int size)
{
	//1.利用calloc为循环队列的管理结构体申请一块堆内存
	CirQueue_t *Manager = (CirQueue_t *)calloc(1,sizeof(CirQueue_t));

	if(NULL == Manager)
	{
		perror("calloc memory for manager is failed");
		exit(-1); //程序异常终止
	}

	//2.利用calloc为所有元素申请堆内存
	Manager->Addr = (DataType_t *)calloc(size,sizeof(DataType_t));

	if (NULL == Manager->Addr)
	{
		perror("calloc memory for element is failed");
		free(Manager);
		exit(-1); //程序异常终止
	}

	//3.对管理循环队列的结构体进行初始化(循环队列容量 + 队尾下标+队首下标)
	Manager->Size = size;	//对循环队列中的容量进行初始化
	Manager->Rear = 0;		//队尾下标初值为0
	Manager->Front = 0;		//队首下标初值为0
	
	return Manager;
}


//判断循环队列是否已满
bool CirQueue_IsFull(CirQueue_t *Manager)
{
	return ( (Manager->Rear + 1) % Manager->Size == Manager->Front ) ? true : false;
}


//入队
bool CirQueue_Enqueue(CirQueue_t *Manager, DataType_t Data)
{
	//1.判断循环队列是否已满
	if ( CirQueue_IsFull(Manager) )
	{
		printf("CirQueue is Full!\n");
		return false;
	}

	//2.如果循环队列有空闲空间,则把新元素添加到循环队列尾部
	Manager->Addr[Manager->Rear] = Data;


	//防止队尾下标越界
	Manager->Rear = (Manager->Rear+1) % Manager->Size;


	return true;
}





//判断循环队列是否为空
bool CirQueue_IsEmpty(CirQueue_t *Manager)
{
	return (Manager->Front == Manager->Rear) ? true : false;
}



//出队
DataType_t CirQueue_Dequeue(CirQueue_t *Manager)
{
	DataType_t temp =0;

	//1.判断循环队列是否为空
	if ( CirQueue_IsEmpty(Manager) )
	{
		printf("CirQueue is Empty!\n");
		return false;
	}

	//2.把元素从队首出队,并备份到变量temp
	temp = Manager->Addr[Manager->Front];
	
	//防止队首下标越界
	Manager->Front = (Manager->Front+1) % Manager->Size;


	return temp;
}






int main(int argc, char const *argv[])
{

	
	return 0;
}


标签:CirQueue,下标,队列,实现,Manager,循环,return
From: https://www.cnblogs.com/kencszqh/p/18176170

相关文章

  • MLP实现波士顿房屋价格回归任务
    1.数据集波士顿房屋价格.csv文件,文件中的数据有可能不完整,部分数据如下:CRIM,ZN,INDUS,CHAS,NOX,RM,AGE,DIS,RAD,TAX,PTRATIO,LSTAT,MEDV0.00632,18,2.31,0,0.538,6.575,65.2,4.09,1,296,15.3,4.98,240.02731,0,7.07,0,0.469,6.421,78.9,4.9671,2,242,17.8,9.14,21.60.02......
  • 顺序栈的实现
    /********************************************************************************************************** filename: Zqh_栈实现.c* author : [email protected]* date : 2024/05/05* function: 该程序实现顺序栈元素的增删改查 * note : 模板* *Cop......
  • 双向循环链表的实现
    /********************************************************************************************************** filename: Zqh_链表.c* author : [email protected]* date : 2024/05/05* function: 链表的增删改查* note : 模板* *Copyright(c)2023-202......
  • 如何用递归实现二叉搜索树的增删改查
    点击查看代码/**@Author:WangYiMing*@Date:2024-04-2323:37:21*@LastEditors:WangYiMing*@LastEditTime:2024-04-2618:22:35*/#include<stdio.h>#include<stdlib.h>///@brief二叉树基础结构typedefstructbinary_tree_node{intdata;stru......
  • 双向链表实现
    /********************************************************************************************************** filename: Zqh_链表.c* author : [email protected]* date : 2024/05/05* function: 链表的增删改查* note : 模板* *Copyright(c)2023-202......
  • 单向循环链表的实现
    /********************************************************************************************************** filename: Zqh_链表.c* author : [email protected]* date : 2024/05/05* function: 链表的增删改查* note : 模板* *Copyright(c)2023-202......
  • 顺序表的实现
    /********************************************************************************************************** filename: Zqh_顺序表.c* author : [email protected]* date : 2024/05/05* function: 顺序表的增删改查* note : 模板* *Copyright(c)2023......
  • HarmonyOS 实现下拉刷新,上拉加载更多
    组件介绍PullToRefreshList允许用户通过下拉动作来刷新列表内容,以及通过上拉动作来加载更多的数据。组件内部封装了滚动监听、状态管理和动画效果,使得开发者可以轻松集成到自己的项目中。1.实现思路封装成可复用的公共控件:将下拉刷新和上拉加载更多功能封装为一个可复用的组......
  • 在英特尔至强 CPU 上使用 Optimum Intel 实现超快 SetFit 推理
    在缺少标注数据场景,SetFit是解决的建模问题的一个有前途的解决方案,其由HuggingFace与Intel实验室以及UKPLab合作共同开发。作为一个高效的框架,SetFit可用于对SentenceTransformers模型进行少样本微调。SetFit仅需很少的标注数据就能达到较高的准确率,例如,在使用3-......
  • docker-compose+nginx实现服务不中断更新
    思路是写一个脚本,docker-composescale扩容,然后重写nginx配置文件,刷新负载均衡nginx重写的配置文件,文件名service,里面只有upstream,例如:upstreame-chatbot-server-dev{server0.0.0.0:8080;server0.0.0.0:8081;}脚本使用方法:./rollupdate.sh--service=test-serve......