引言
今天刷leetcode时,遇到了关于BFS算法的一道题,而BFS一般用队列实现,C语言没有直接可以生成队列的库函数,所以需要自己编写,在此记录一下队列的c语言实现。
数据结构定义
首先定义队列所用到的数据结构,如下:
//创建结点
struct Node{
int val; //这里根据存放的数据改变数据类型,如果存放其他的数据类型,下面函数中的数据类型跟这变。
struct Node* next;
};
//创建队列数据结构
struct Queue{
struct Node* head;
struct Node* tail;
};
typedef struct Queue* Qpinter;
typedef struct Node* nodePr;
队列初始化函数
Qpinter creatQueue()
{
Qpinter tempQ = (Qpinter)malloc(sizeof(struct Queue));
if(tempQ == NULL)
exit(0);
tempQ->head = NULL;
tempQ->tail = NULL;
return tempQ;
}
插入元素
//插入元素
Qpinter insetQueue(Qpinter q, int a)
{
nodePr tempN = (nodePr)malloc(sizeof(struct Node));
tempN->val = a;
tempN->next = NULL;
if(q->head == NULL) //队列为空
{
q->tail = tempN;
q->head = tempN;
}
else{
q->tail->next = tempN;
}
q->tail = tempN;
return q;
}
删除元素
int deleQueue(Qpinter q)
{
nodePr temp;
int res;
if(q->head == NULL) //队列为空
return NULL;
if(q->head == q->tail) // 队列只有一个元素
{
res = q->head->val;
temp = q->head;
q->head = NULL;
q->tail = NULL;
}
else{
res = q->head->val;
temp = q->head;
q->head = q->head->next;
}
free(temp);
return res;
}
销毁队列
//销毁队列
void destoryQ(Qpinter q)
{
nodePr temp;
while(q->head != NULL)
{
temp = q->head;
q->head = q->head->next;
free(temp);
}
}
总结
用链式结构实现的队列不用判断队列是否为满,可以一直存,若要判断长度需要在定义size记录。