更新
This commit is contained in:
36
数据结构/队列/main.c
Normal file
36
数据结构/队列/main.c
Normal file
@@ -0,0 +1,36 @@
|
||||
#include "queue.h"
|
||||
#include <stdio.h>
|
||||
|
||||
int main(){
|
||||
|
||||
int a[10]; //创建队列容器
|
||||
SqQuecu a_quecu; //初始化队列
|
||||
InitQuecu(&a_quecu,10,sizeof(int),(void*)a);
|
||||
//出队进队测试
|
||||
int *tmep;//临时存储进对的返回值
|
||||
for (size_t i = 0; i < 50; i++)
|
||||
{
|
||||
tmep = (int*)enQueue(&a_quecu);
|
||||
if(tmep!=NULL){ //返回值为空指针则对满
|
||||
*tmep=i;
|
||||
}
|
||||
else{
|
||||
printf("出队元素:%d\n",*(int*)deQueue(&a_quecu));
|
||||
*(int*)enQueue(&a_quecu)=i; //出队后重新进队
|
||||
}
|
||||
for(int i=0;i<10;i++)
|
||||
printf("%d\n",a[i]);
|
||||
|
||||
printf("-------------------------\n");
|
||||
|
||||
}
|
||||
|
||||
//连续退队测试
|
||||
for(int i=0;i<5;i++){
|
||||
printf("出队元素:%d\n",*(int*)deQueue(&a_quecu));
|
||||
printf("当前队列长度:%d\n",a_quecu.size);
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
||||
}
|
||||
82
数据结构/队列/queue.c
Normal file
82
数据结构/队列/queue.c
Normal file
@@ -0,0 +1,82 @@
|
||||
/*
|
||||
*@文件:queue.c
|
||||
*@作者:‘你遇了我’
|
||||
*@time:2022/11/13
|
||||
*@联系:QQ:321640253
|
||||
*@版本:V1.2
|
||||
*@描述:数组泛型队列。队列管理和容器空间分离
|
||||
使用案例:
|
||||
|
||||
*/
|
||||
//
|
||||
// Created by 86186 on 2022/11/13.
|
||||
//
|
||||
|
||||
#include "queue.h"
|
||||
|
||||
/*
|
||||
* @简介:初始化一个队列
|
||||
* @参数:
|
||||
* *Q:队列指针
|
||||
* Maxsize:队列容器数组的长度
|
||||
* NodeSize:队列容器数组每个元素的空间
|
||||
* *container:容器数组指针
|
||||
* @返回值:无
|
||||
* */
|
||||
void InitQuecu(SqQuecu *Q,uint16_t Maxsize,uint16_t NodeSize,void *container){
|
||||
Q->front=Q->rear=-1;
|
||||
Q->size=0;
|
||||
Q->Maxsize=Maxsize;
|
||||
Q->NodeSize=NodeSize;
|
||||
Q->container=container;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* @简介:判断队列为空
|
||||
* @参数:队列指针
|
||||
* @返回值:布尔值
|
||||
* */
|
||||
bool QueueEmpty(SqQuecu *Q){
|
||||
if(Q->size==0)return true;
|
||||
else return false;
|
||||
}
|
||||
|
||||
/*
|
||||
* @简介:判断队列为满
|
||||
* @参数:队列指针
|
||||
* @返回值:布尔值
|
||||
* */
|
||||
bool QueueFull(SqQuecu *Q){
|
||||
if(Q->size==Q->Maxsize)return true;
|
||||
else return false;
|
||||
}
|
||||
|
||||
/*
|
||||
* @简介:进队
|
||||
* @参数:队列指针
|
||||
* 进队元素
|
||||
* @返回值:可进队空间的地址
|
||||
* */
|
||||
void *enQueue(SqQuecu *Q){
|
||||
if(QueueFull(Q))return NULL;
|
||||
if(Q->rear==Q->Maxsize-1)Q->rear=-1;
|
||||
Q->rear++;
|
||||
Q->size++;
|
||||
return Q->container+Q->rear*Q->NodeSize;
|
||||
}
|
||||
|
||||
/*
|
||||
* @简介:出队
|
||||
* @参数:队列指针
|
||||
* @返回值:出队元素的地址指针
|
||||
* */
|
||||
void *deQueue(SqQuecu *Q){
|
||||
if(QueueEmpty(Q))return NULL;
|
||||
if(Q->front==Q->Maxsize-1)Q->front=-1;
|
||||
Q->front++;
|
||||
Q->size--;
|
||||
return Q->container+Q->front*Q->NodeSize;
|
||||
}
|
||||
|
||||
|
||||
62
数据结构/队列/queue.h
Normal file
62
数据结构/队列/queue.h
Normal file
@@ -0,0 +1,62 @@
|
||||
/*
|
||||
*@文件:queue.h
|
||||
*@作者:‘你遇了我’
|
||||
*@time:2022/11/13
|
||||
*@联系:QQ:321640253
|
||||
*@版本:V1.2
|
||||
*@描述:数组泛型队列,队列管理和容器空间分离
|
||||
使用案例
|
||||
int a[10]; //创建队列容器
|
||||
SqQuecu a_quecu; //初始化队列
|
||||
InitQuecu(&a_quecu,10,sizeof(int),(void*)a);
|
||||
|
||||
//出队进队测试
|
||||
int *tmep;//临时存储进对的返回值
|
||||
for (size_t i = 0; i < 50; i++)
|
||||
{
|
||||
tmep = (int*)enQueue(&a_quecu);
|
||||
if(tmep!=NULL){ //返回值为空指针则对满
|
||||
*tmep=i;
|
||||
}
|
||||
else{
|
||||
printf("出队元素:%d\n",*(int*)deQueue(&a_quecu));
|
||||
*(int*)enQueue(&a_quecu)=i; //出队后重新进队
|
||||
}
|
||||
for(int i=0;i<10;i++)
|
||||
printf("%d\n",a[i]);
|
||||
|
||||
printf("-------------------------\n");
|
||||
|
||||
}
|
||||
|
||||
//连续退队测试
|
||||
for(int i=0;i<5;i++){
|
||||
printf("出队元素:%d\n",*(int*)deQueue(&a_quecu));
|
||||
printf("当前队列长度:%d\n",a_quecu.size);
|
||||
}
|
||||
*/
|
||||
|
||||
#ifndef LIST_QUEUE_H
|
||||
#define LIST_QUEUE_H
|
||||
|
||||
#include "stdint.h"
|
||||
#include "stdbool.h"
|
||||
#include "stdlib.h"
|
||||
|
||||
|
||||
typedef struct{
|
||||
uint16_t Maxsize; //数组最大长度
|
||||
uint16_t NodeSize; //数组元素的空间大小
|
||||
void *container; //容器的指针
|
||||
int front,rear; //尾和头
|
||||
uint16_t size; //队列长度
|
||||
} SqQuecu;
|
||||
|
||||
void InitQuecu(SqQuecu *Q,uint16_t Maxsize,uint16_t NodeSize,void *container);
|
||||
void *enQueue(SqQuecu *Q);
|
||||
void *deQueue(SqQuecu *Q);
|
||||
bool QueueEmpty(SqQuecu *Q);
|
||||
bool QueueFull(SqQuecu *Q);
|
||||
|
||||
|
||||
#endif //LIST_QUEUE_H
|
||||
Reference in New Issue
Block a user