队列更新
加入了快捷队列驱动,还有仿FIFO函数处理
This commit is contained in:
93
bsp_Device/bsp_Queue.c
Normal file
93
bsp_Device/bsp_Queue.c
Normal file
@@ -0,0 +1,93 @@
|
||||
/*----------------------------------------------------------------------------------------------------
|
||||
# THIS FILE IS A PART OF XerolySkinner's PROJECT
|
||||
#
|
||||
# THIS PROGRAM IS FREE SOFTWARE
|
||||
#
|
||||
# E-mail:ZABBCCCBBAZ@163.com
|
||||
# QQ:2715099320
|
||||
#
|
||||
# Copyright (c) 2022 XerolySkinner
|
||||
# All rights reserved.
|
||||
*/
|
||||
|
||||
/*----------------------------------------------------------------------------------------------------
|
||||
名字:bsp_Queue
|
||||
时间:20220806-0226
|
||||
程序员:梁源康
|
||||
说明:队列与FIFO函数
|
||||
*/
|
||||
#include "stdio.h"
|
||||
#include "stdlib.h"
|
||||
#include "string.h"
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// 声明
|
||||
struct _Queue {
|
||||
struct _Queue* front;
|
||||
void* member;
|
||||
struct _Queue* rear;
|
||||
};
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// 主程序
|
||||
struct _Queue* bsp_QueueInit(void) {
|
||||
struct _Queue* list = malloc(sizeof(struct _Queue));
|
||||
if (list == NULL)return NULL;
|
||||
list->front = NULL;
|
||||
list->rear = NULL;
|
||||
list->member = NULL;
|
||||
return list;}
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// 队列空检测
|
||||
char bsp_QueueEmpty(struct _Queue *list) {
|
||||
return (list->front == NULL && list->rear == NULL);}
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// 队列尾巴处压入成员
|
||||
char bsp_QueuePush(struct _Queue *list,void* member) {
|
||||
struct _Queue* listAdd = malloc(sizeof(struct _Queue));
|
||||
struct _Queue* listFront = list->front;
|
||||
struct _Queue* listRear = list->rear;
|
||||
if (list == NULL)return 1; //防止爆炸
|
||||
if (listAdd == NULL)return 1; //防止爆炸
|
||||
|
||||
listAdd->member = member; //加入聪明仔
|
||||
|
||||
// 空单位初始化
|
||||
if (bsp_QueueEmpty(list)) {
|
||||
list->front = list->rear = listAdd;
|
||||
listAdd->front = listAdd->rear = listAdd;}
|
||||
// 常单位续编
|
||||
else {
|
||||
listAdd->front = listRear; //新节点连接尾巴
|
||||
listRear->rear = listAdd; //尾巴交接新节点
|
||||
listAdd->rear = listAdd; //尾巴自交
|
||||
list->rear = listAdd; //新尾巴
|
||||
}
|
||||
return 0;}
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
char bsp_QueuePushCharPtr(struct _Queue* list, char* member, unsigned int len) {
|
||||
char* enter = malloc(len+1);
|
||||
if (enter == NULL)return 1;
|
||||
enter[len] = '\0';
|
||||
strcpy_s(enter,len+1, member);
|
||||
bsp_QueuePush(list,enter);}
|
||||
|
||||
void bsp_QueuePushCharPtrFree(char* member) {
|
||||
free(member);}
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// 队列头部弹出成员
|
||||
void* bsp_QueuePop(struct _Queue* list) {
|
||||
struct _Queue* listFront = list->front;
|
||||
struct _Queue* listRear = list->rear;
|
||||
void* result=NULL;
|
||||
if (list == NULL)return NULL; //防止爆炸
|
||||
if (bsp_QueueEmpty(list))return NULL; //寡妇函数
|
||||
|
||||
// 寡妇节点
|
||||
if (listFront== listRear) {
|
||||
list->front = list->rear = NULL;
|
||||
result= listFront->member;}
|
||||
else {
|
||||
list->front = listFront->rear;
|
||||
result= listFront->member;}
|
||||
free(listFront); //抹脖子
|
||||
return result;}
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
Reference in New Issue
Block a user