头部互动开始 -->

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

单链表队列的头删尾插

/*************************************************
/**
  * @file name:	单链表队列的头删尾插.md
  * @brief  实现对单链表队列的头删尾插
  * @author 15070884254@163.com
  * @date 2024/04/26
  * @version 1.0 :在下坂本,有何贵干 
  * @property :none
  * @note   none
  * CopyRight (c)  2023-2024  15070884254@163.com   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;
}
posted @ 2024-04-26 20:18  罗天天  阅读(5)  评论(0编辑  收藏  举报