#include "linkqueue.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/*
* queue_create:创建一个空队列
* @ret NULL--err other--空队列指针
* */
linkqueue* queue_create(void){
linkqueue* pQueue = NULL;
linklist pLink = NULL;
//1.申请空间
//1.1 队列空间
pQueue = (linkqueue*)malloc(sizeof(linkqueue));
if(pQueue == NULL){
printf("pQueue malloc err\n");
return NULL;
}
//1.2 单链表空间
pLink = (linklist)malloc(sizeof(listnode));
if(pLink == NULL){
printf("pLink malloc err\n");
free(pQueue);//释放前面申请的空间
return NULL;
}
//2.初始化
pLink->data = 0;
pLink->pNext = NULL;
pQueue->front = pLink;
pQueue->rear = pLink;
return pQueue;
}
/*
* enter_queue:入队列
* param pQueue:队列地址
* param value:入队数据
* @ret -1--err 0--success
* */
int enter_queue(linkqueue* pQueue,data_t value){
linklist pLink = NULL;
//1.判断参数有效性
if(pQueue == NULL){
printf("pQueue is NULL\n");
return -1;
}
//2.创建链表结点
pLink = (linklist)malloc(sizeof(listnode));
if(pLink == NULL){
printf("malloc err\n");
return -1;
}
pLink->data = value;
pLink->pNext = NULL;
//3.入队列
//rear后链接新结点
pQueue->rear->pNext = pLink;
//队列指针偏移
pQueue->rear = pLink;
return 0;
}
/*
* out_queue:出队列
* param pQueue:队列地址
* param value:出队数据存放的地址
* @ret -1--err 0--success
* */
int out_queue(linkqueue* pQueue,data_t* value){
linklist pTmp = NULL;
//1.判断参数有效性
if(pQueue == NULL){
printf("pQueue is NULL\n");
return -1;
}
//2.判断是否为空队列
if(pQueue->front == pQueue->rear){
printf("queue is empty\n");
return -1;
}
//3.保存剩余数据
pTmp = pQueue->front->pNext->pNext;
//4.出队后队列为空时,需将rear指向冗余头部代表空队列
if(pQueue->front->pNext == pQueue->rear){
pQueue->rear = pQueue->front;
}
//5.开始出队列
*value = pQueue->front->pNext->data;
free(pQueue->front->pNext);
pQueue->front->pNext = pTmp;
return 0;
}
/*
* queue_delete:删除整个队列
* param pQueue:队列地址
* @ret -1--err 0--success
* */
int queue_delete(linkqueue** pQueue){
linklist pTmp = NULL;
//1.判断参数有效性
if(*pQueue == NULL){
printf("pQueue is NULL\n");
return -1;
}
//2.开始释放链表
while((*pQueue)->front != NULL){
pTmp = (*pQueue)->front;
(*pQueue)->front = (*pQueue)->front->pNext;
free(pTmp);
}
//3.释放队列
free(*pQueue);
*pQueue = NULL;
return 0;
}
荣世蓥
- 粉丝: 870
- 资源: 13
最新资源
- IMG_20241009_233018.jpg
- 威伦触摸屏与MODBUD RTU 变频器通信标准程序 程序+资料+视频讲解 无需PLC RS458直连 可串多台设备 温控仪
- Mysql C++ connector 8.3
- 基于鲸鱼算法优化的lssvm回归预测:为了提高最小二乘支持向量机(lssvm)的回归预测准确率,对lssvm中的惩罚参数和核惩罚
- COMSOL仿真 无损检测-电磁检测 包括涡流检测,漏磁检测,脉冲涡流、弱磁检测,ACFM,磁记忆检测,远场涡流,电磁超声等
- gs3333333333333333
- gs222222222222222
- ABAQUS 轮胎建模-过盈充气-模态-滚动-频响仿真 abaqus 轮胎仿真包括自由模态仿真,刚度仿真,印痕仿真,接地静止的模
- 202330904094.sql
- 行星齿轮非线性程序,能出相图,庞加莱,分叉图
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈