首页 > 其他分享 >单链表:清空、销毁、求单链表结点个数、判空函数

单链表:清空、销毁、求单链表结点个数、判空函数

时间:2023-02-14 18:47:32浏览次数:41  
标签:结点 单链 return 链表 phead 判空 NULL plist pnext

一、单链表结构定义

typedef void(myOpFunType)(void*);	///< 定义操作函数类型
typedef int linkType;			///< 定义链表结点数据域数据类型


/// @brief  链表结点定义
typedef struct t_linkNode
{
    struct t_linkNode* pnext;  ///< 结点指针域
    linkType data;             ///< 结点数据域
}myLNode;

/// @brief 链表结构定义
typedef struct t_linkList
{
    myLNode* phead;   //< 链表头结点
}myLinkList;

二、清空单链表函数

/// @mybrief 清空单链表
/// @param plist:链表结构指针
/// @return 无返回值
void xxx_clear(myLinkList* plist)
{
    if (plist == NULL||plist->phead==NULL)
    {
        return;
   }
    xxx_clear_(plist->phead);
}
void xxx_clear_(myLNode* phead)
{
    if (phead == NULL)
    {
        return;
    }
    myLNode* pdel = phead->pnext;
    while (pdel != NULL)
    {
        /// 当pdel指向尾结点时,下句包含着将phead指针域置空
        phead->pnext = pdel->pnext;
        free(pdel);
        pdel = phead->pnext;
    }
}

 

三、销毁单链表函数

void xxx_destroy(myLinkList* plist)
{
    if (plist == NULL)
    {
        return;
    }
    xxx_destroy_(plist->phead);
    free(plist->phead);
    plist->phead = NULL;
}
void xxx_destroy_(myLNode* phead)
{
    if (phead == NULL)
    {
        return;
    }
    myLNode* pdel = phead->pnext;
    while (pdel != NULL)
    {
        phead->pnext = pdel->pnext;
        free(pdel);
        pdel = phead->pnext;
    }
}

 

四、求单链表结点个数

/// @brief 求链表结点个数
/// @param plist 链表指针
/// @return 返回结点个数
/// @retval -1:链表不存在
/// @retval 非负整数:链表结点个数
int xxx_size(const myLinkList* plist)
{
    if (plist == NULL)
    {
        return -1;
    }
    return xxx_size_(plist->phead);
}
int xxx_size_(const myLNode* phead)
{
    if (phead == NULL)
    {
        return -1;
    }
    myLNode* p = phead->pnext;
    int i = 0;
    while (p != NULL)
    {
        ++i;
        p = p->pnext;
    }
    return i;
}

 

五、判空函数

/// @brief 判空函数
/// @param plist 链表指针
/// @return status:返回链表是否为空
status xxx_empty(const myLinkList* plist)
{
    if (plist == NULL || plist->phead == NULL)
    {
        return ERROR;
    }
    return plist->phead->pnext == NULL ? TRUE : FALSE;
}

 

标签:结点,单链,return,链表,phead,判空,NULL,plist,pnext
From: https://www.cnblogs.com/kxwslmsps/p/17120555.html

相关文章

  • 单链表:从键盘输入元素创建单链表
    一、单链表结构定义typedefvoid(myOpFunType)(void*); ///<定义操作函数类型typedefintlinkType; ///<定义链表结点数据域数据类型///@brief链表结点定义t......
  • 单链表:打印单链表
    一、单链表结构定义typedefvoid(myOpFunType)(void*); ///<定义操作函数类型typedefintlinkType; ///<定义链表结点数据域数据类型///@brief链表结点定义t......
  • 单链表:查找元素x的前驱结点
    一、单链表结构定义typedefvoid(myOpFunType)(void*); ///<定义操作函数类型typedefintlinkType; ///<定义链表结点数据域数据类型///@brief链表结点定义ty......
  • 单链表:初始化单链表
    一、单链表结构定义typedefvoid(myOpFunType)(void*); ///<定义操作函数类型typedefintlinkType; ///<定义链表结点数据域数据类型///@brief链表结点定义t......
  • 单链表:用C语言实现-单链表头文件相关定义
    一、公共头文件#ifndef__MYHEAD_H__#define__MYHEAD_H__/*******************************************************************@file:myhead.h*@brief:公......
  • 【数据结构】单链表 — 纯C实现单链表
    ......
  • 输出二叉树第h层上的所有结点(1<=h<=k)
    输出二叉树第h层上的所有结点(1<=h<=k)问题引入:已知一颗二叉链表方式存储的深度为k的二叉树,根结点是第1层。编写算法,输出第h层所有结点,1<=h<=k。分析二叉树的算......
  • 插入有序的单链表(要求插入后元素有序排列)
    问题引入:某校实验室有一批计算机,按其价格从低到高的次序构成了一个单链表存放,链表中每个结点指出同样价格的若干台。现在又增加m台价格为h元的计算机,编程实现实验室计......
  • 两个单向循环链表的合并(带头结点)
    两个单向循环链表的合并(带头结点)问题引入:已知两个带头结点的单向循环链表,LA和LB分别是链表的头指针,LA=(a1,a2…am),LB=(b1,b2,…bm),编写算法,将LA和LB合并成一个单......
  • 求二叉树中度为1的结点个数
    一、问题引入已知一颗以二叉链表方式存储的二叉树,编写算法计算二叉树的单孩子的结点数。单孩子是指该结点只有左孩子或只有右孩子(其实就是求度为1的结点个数)二、......