单链表队列的头删尾插
/*************************************************
/**
* @file name: 单链表队列的头删尾插.md
* @brief 实现对单链表队列的头删尾插
* @author [email protected]
* @date 2024/04/26
* @version 1.0 :在下坂本,有何贵干
* @property :none
* @note none
* CopyRight (c) 2023-2024 [email protected] All Right Reseverd
*
**************************************************/
#include <stdio.h>
#include <stdbool.h>
typedef int DataType_t;
// 构造单链表队列的结点,队列中所有结点的数据类型应该是相同的
typedef struct Linkqueue
{
DataType_t data; // 单链表队列结点的数据域
struct LLqueue *next; // 单链表队列尾结点的指针域
} LLque_t;
// 创建一个空链表队列,空链表队列应该有一个头结点,对链表进行初始化
LLque_t *LLque_Create(void)
{
// 1.创建一个头结点并对头结点申请内存
LLque_t *Head = (LLque_t *)calloc(1, sizeof(LLque_t));
if (NULL == Head)
{
perror("Calloc memory for Head is Failed");
exit(-1);
}
// 2.对头结点进行初始化,头结点是不存储有效内容的!!!
Head->next = NULL;
// 3.把头结点的地址返回即可
return Head;
}
// 创建新的结点,并对新结点进行初始化(数据域 + 指针域)
LLque_t *LLque_NewNode(DataType_t data)
{
// 1.创建一个新结点并对新结点申请内存
LLque_t *New = (LLque_t *)calloc(1, sizeof(LLque_t));
if (NULL == New)
{
perror("Calloc memory for NewNode is Failed");
return NULL;
}
// 2.对新结点的数据域和指针域进行初始化
New->data = data;
New->next = NULL;
return New;
}
/*************************************************
/**
* @function name: LLque_HeadDel
* @brief 对单链表队列进行头删
* @param Head:头指针 data:结点的值
* @retval 函数返回类型为DataType_t型
* @date 2024/04/26
* @version 1.0 :在下坂本,有何贵干
* @note none
**************************************************/
DataType_t LLque_HeadDel(LLque_t *Head, DataType_t Data)
{
// 判断列表是否是空
if (NULL == Head->next)
{
printf("deleting queue is false ");
return;
}
LLque_t *Phead = Head->next;
LLque_t *Ptail = Head->next;
// 将头结点后面的节点进行删除
DataType_t temp = Phead->data;
Head->next = Phead->next;
return temp;
}
/*************************************************
/**
* @function name: LLque_TailAdd
* @brief 对队列尾部进行增加节点
* @param Head:头指针 data:结点值
* @retval 函数返回类型为bool型
* @date 2024/04/26
* @version 1.0 :在下坂本,有何贵干
* @note none
**************************************************/
bool LLque_TailAdd(LLque_t *Head, DataType_t data)
{
LLque_t *New = LLque_NewNode(data);
LLque_t *Phead = Head;
while (Phead->next != NULL)
{
Phead = Phead->next;
}
Phead->next = New; //插入新结点到尾部
}
/*************************************************
/**
* @function name: LLque_showq
* @brief 展示队列的值
* @param Head:头指针 data:结点值
* @retval 函数返回类型为bool型
* @date 2024/04/26
* @version 1.0 :在下坂本,有何贵干
* @note none
**************************************************/
void LLque_showq(LLque_t *Head)
{
//判断队列是否为空
if (NULL == Head->next)
{
printf(" queue is NULL ");
return;
}
LLque_t *Phead = Head->next;
while (Phead != NULL)
{
printf("queue has ");
printf("%d ", Phead->data);
printf("\n");
Phead = Phead->next;
}
return;
}
// 测试代码可行性(能跑就行)
int main()
{
LLque_t *test = LLque_Create();
LLque_TailAdd(test, 11);
LLque_TailAdd(test, 22);
LLque_TailAdd(test, 220);
LLque_HeadDel(test, 220);
LLque_showq(test);
return 0;
}
标签:Head,单链,队列,LLque,结点,next,Phead,数据结构,删尾
From: https://www.cnblogs.com/luo-tt/p/18160804