文章目录
- 🍊自我介绍
- 🍊概述
- 🍊链式队列代码
- linkstack.c
- linkstack.h
- main.c
你的点赞评论就是对博主最大的鼓励
当然喜欢的小伙伴可以:点赞+关注+评论+收藏(一键四连)哦~
🍊自我介绍
Hello,大家好,我是小珑也要变强(也是小珑),我是易编程·终身成长社群的一名“创始团队·嘉宾” 和“内容共创官” ,现在我来为大家介绍一下有关物联网-嵌入式方面的内容。
今天我们来进行队列的最后一节内容,小伙伴们大家加油,一起努力哦~
🍊概述
介绍:
链式队列:插入操作再队尾进行,删除操作在队头进行,由队头指针和队尾指针控制队列的操作。
图解:
通过图解来看,链式队列操作由两部分,一部分是链表头,一部分是队列头。
🍊链式队列代码
linkstack.c
#include "linkstack.h"
//1.创建一个空的链式队列.为队列头和头结点分配空间
linkqueue_t *create_empty_linkqueue()
{
linkqueue_t *q = NULL;
linknode_t *head = NULL;
//1.先给头结点分配空间
head = (linknode_t *)malloc(sizeof(linknode_t));
head->next = NULL;
//2.为队列头分配空间
q = (linkqueue_t *)malloc(sizeof(linkqueue_t));
q->front = q->rear = head;
//返回队列头
return q;
}
//2.判空
int is_empty_linkqueue(linkqueue_t *q)
{
return q->front == q->rear ? 1 : 0;
}
//3.入队
void enter_linkqueue(linkqueue_t *q,data_t data)
{
linknode_t *temp = NULL;
temp = (linknode_t *)malloc(sizeof(linknode_t));
temp->data = data;
temp->next = q->rear->next;
q->rear->next = temp;
//更新尾指针
q->rear = temp;
return ;
}
//4.出队
data_t delete_linkqueue(linkqueue_t *q)
{
linknode_t *temp = NULL;
data_t data;
//1.保存要删除结点的地址,取出数据
temp = q->front->next;
data = temp->data;
//2.释放结点
q->front->next = temp->next;
free(temp);
temp = NULL;
//3.若是为空,q->front->next == NULL.
if(q->front->next == NULL)
{
q->rear = q->front;
}
return data;
}
linkstack.h
#ifndef __LINKSTACH_H__
#define __LINKSTACH_H__
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
//链表结点的设计
typedef int data_t;
typedef struct node
{
data_t data;
struct node *next;
}linknode_t;
//队列头的设计
typedef struct
{
linknode_t *front;
linknode_t *rear;
}linkqueue_t;
//1.创建一个空的链式队列.为队列头和头结点分配空间
extern linkqueue_t *create_empty_linkqueue();
//2.判空
extern int is_empty_linkqueue(linkqueue_t *q);
//3.入队
extern void enter_linkqueue(linkqueue_t *q,data_t data);
//4.出队
extern data_t delete_linkqueue(linkqueue_t *q);
#endif
main.c
#include "linkstack.h"
int main()
{
linkqueue_t *q = NULL;
int i = 0;
q = create_empty_linkqueue();
for(i = 0;i < 10;i++)
{
enter_linkqueue(q,i);
}
while(!is_empty_linkqueue(q))
{
printf("%d ",delete_linkqueue(q));
}
printf("\n");
return 0;
}