首页 > 其他分享 >数据结构—单链表队列头删尾插

数据结构—单链表队列头删尾插

时间:2024-04-26 20:22:22浏览次数:21  
标签:Head 单链 队列 LLque 结点 next Phead 数据结构 删尾

单链表队列的头删尾插

/*************************************************
/**
  * @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

相关文章

  • C语言数据结构:链式队列的创建及其出入队操作
    /**********************************************************************************************************该程序实现链式队列元素的增删改查,目的是提高设计程序的逻辑思维,另外为了提高可移植性,所以链式队列中元素*的数据类型为DataType_t,用户可以根据实际情况修改......
  • 数据结构-链表-2
    本函数功能为将查找单链表中的倒数第k个结点将其data输出<!--RevCount.c文件(查找单链表中的倒数第k个结点将其data输出)的实现-->/*******************************************************************************funcname:LinList_RevCount*function:......
  • 数据结构算法题
    数据结构算法题通过键盘输入一个包括'('和')'的字符串string,判断字符串是否有效。要求设计算法实现检查字符串是否有效,有效的字符串需满足以下条件:A.左括号必须用相同类型的右括号闭合。B.左括号必须以正确的顺序闭合。C.每个右括号都有一个对应的相同类型的左括号。思......
  • C语言数据结构:顺序栈的创建、出入栈,以及使用顺序栈实现十进制转十六进制
    /***********************************************************************************************************该程序实现顺序栈元素的增删改查,目的是提高设计程序的逻辑思维,另外为了提高可移植性,所以顺序栈中元素的*数据类型为DataType_t,用户可以根据实际情况修改......
  • 单链表的头插、尾插、中间插、头删、尾删、中间删
    //指的是单向链表中的结点有效数据类型,用户可以根据需要进行修改typedefintDataType_t;//构造链表的结点,链表中所有结点的数据类型应该是相同的typedefstructLinkedList{ DataType_t data;//结点的数据域 structLinkedList *next;//结点的指针域}LList_t;......
  • 基于c语言数据结构-双循环链表
    DoubleCircularLinkedList双循环链表/**************************************************************函数名称:*函数功能:设计双向循环链表的接口*函数参数:*返回结果:*注意事项:None*函数作者:zcx982795194@[email protected]*创建日期:2024/04/25*修......
  • 数据结构(顺序表)
    /***********************************************************************************************************该的程序实现顺序表元素增删改查,目的是提高设计程序的逻辑思维,另外为了提高可移植性,所以顺序表中元素的*数据类型为DataType_t,用户可以根据实际情况修改顺序......
  • 数据结构(顺序栈元素的增删改查)
    /***********************************************************************************************************该程序实现顺序栈元素的增删改查,目的是提高设计程序的逻辑思维,另外为了提高可移植性,所以顺序栈中元素的*数据类型为DataType_t,用户可以根据实际情况修改顺序......
  • 数据结构_链表_单向循环链表的初始化、插入、删除、修改、查询打印(基于C语言实现)
    版本:2024年4月25日V1.0发布于博客园/***@filename:CircularLinkedList.c*@brief:实现单向循环链表的相关功能*@author:[email protected]*@date:2024/04/25*@version:1.1*@note:*CopyRight(c)2023-2024RISE_A......
  • 数据结构——双向循环链表
    二、双向循环链表(一)双向循环链表的构造双向循环链表的首结点中的prev指针成员指向链表的尾结点,并且双向循环链表的尾结点里的next指针成员指向链表的首结点,所以双向循环链表也属于环形结构。1)构造双向循环链表的结点//双向链表中的结点有效数据类型,用户可以根据需要进行修......