首页 > 其他分享 >DS-单链表:单链表结构定义

DS-单链表:单链表结构定义

时间:2023-02-16 01:13:42浏览次数:30  
标签:结点 单链 定义 xxx myLNode DS 链表 retval plist

一、公共头文件

  • 代码如下:
#ifndef __MYHEAD_H__
#define __MYHEAD_H__
/******************************************************************
* @file    :myhead.h
* @brief   :公共头文件定义
* @details :常用的库文件包含,函数结果状态标志
* @author  :kxwslmsps
* @email   :
* @version :
* @date    :2023-00-00
******************************************************************/

#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cassert>

// 定义函数结果状态标志
#define OK              1	///< OK:表示操作成功
#define ERROR           0	///< ERROR:表示某结构不存在
#define TRUE            1	///< TRUE:表示真
#define FALSE           0	///< FALSE:表示假
#define ERR_PARA       -1	///< ERR_PARA:传入实参值不符合要求
#define ERR_OVERFLOW   -2	///< ERR_OVERFLOW:内存溢出

/// @brief 函数结果状态标志
typedef int status;

#endif // !__MYHEAD_H__

二、单链表头文件

  • 代码如下:
#ifndef __MYLINKLIST_H__
#define __MYLINKLIST_H__
/******************************************************************
* @file    :myLinkList.h
* @brief   :单链表头文件定义
* @details :链表结点定义,链表结构定义,链表常用函数接口声明,包括:
*          :init,clear,destroy,output,size,empty,findPre,find,
*          :locate,locateTail,creatNode,insertNode,push_back,
*          :push_front,pop_back,pop_front,insert,remove,
* @details :链表结点结构定义,链表结构定义,及单链表基本实现的函数接口
* @author  :kxwslmsps
* @email   :[email protected]
* @version :1.0
* @date    :2023-01-014
******************************************************************/


#include "myhead.h"

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 status:返回初始化结果
/// @retval ERROR(0):链表不存在,不可操作
/// @retval ERR_OVERFLOW(-2):创建头结点失败,初始化失败
/// @retval OK(1):初始化成功
/// @attention 内部实现函数的开参是二指指针
status xxx_init(myLinkList* plist);
status xxx_init_(myLNode** phead);

/// @mybrief 清空单链表
/// @param plist:链表结构指针
/// @return 无返回值
void xxx_clear(myLinkList* plist);
void xxx_clear_(myLNode* phead);

void xxx_destroy(myLinkList* plist);
void xxx_destroy_(myLNode* phead);

/// @brief 通过键盘输入元素创建单链表
/// @param plist 链表指针
/// @param flag 当从键盘输入的内容与flag相等时,结束键盘输入
void xxx_input(myLinkList* plist, linkType flag);
void xxx_input_(myLNode* phead, linkType flag);

/// @brief 打印链表
/// @param plist 链表指针
/// @param opf 回调函数指针,指向具体的打印函数
void xxx_output(const myLinkList* plist, myOpFunType* opf);
void xxx_output_(const myLNode* phead, myOpFunType opf);


/// @brief 求链表结点个数
/// @param plist 链表指针
/// @return 返回结点个数
/// @retval -1:链表不存在
/// @retval 非负整数:链表结点个数
int xxx_size(const myLinkList* plist);
int xxx_size_(const myLNode* phead);

/// @brief 判空函数
/// @param plist 链表指针
/// @return status:返回链表是否为空
status xxx_empty(const myLinkList* plist);

/// @brief 查找x元素第一次出现在链表时所在结点的前驱结点
/// @param plist 链表指针
/// @param x 待查找元素
/// @return 返回前驱结点地址
/// @retval 非NULL:查找成功
/// @retval 0地址值:查找失败
myLNode* xxx_findPre(myLinkList* plist, linkType x);
myLNode* xxx_findPre_(myLNode* phead, linkType x);

/// @brief 查找元素x第一次出现在链表时所在的结点
/// @param plist 链表指针
/// @param x 待查元素
/// @return 返回查找结果
/// @retval 非NULL:查找成功
/// @retval 0地址值:查找失败
myLNode* xxx_find(myLinkList* plist, linkType x);
myLNode* xxx_find_(myLNode* phead, linkType x);


/// @brief 定位链表第pos个位序结点的前驱
/// @param plist :链表指针
/// @param pos :位序,取值范围是[1,size]
/// @return 返回第pos个结点的前驱
myLNode* xxx_locatePre(myLinkList* plist, int pos);
myLNode* xxx_locatePre_(myLNode* phead, int pos);

/// @brief 定位链表第pos个位序结点的
/// @param plist :链表指针
/// @param pos :位序,取值范围是[1,size]
/// @return 返回第pos个结点地址
myLNode* xxx_locate(myLinkList* plist, int pos);
myLNode* xxx_locate_(myLNode* phead, int pos);


/// @brief 定位链表尾结点
/// @param plist 
/// @return 返回定位结果
/// @retval 非NULL:尾结点地址
/// @retval NULL:定位失败
myLNode* xxx_locateTail(myLinkList* plist);
myLNode* xxx_locateTail_(myLNode* phead);

/// @brief 给定元素x,创建堆上链表结点
/// @return 返回所创建结点的地址
/// @retval NULL:创建结点失败
/// @retval 非NULL:所创建结点地址
myLNode* xxx_createNode(linkType x);

/// @brief 在链表头部插入元素x,即头插法
/// @param plist 链表指针
/// @param x 待插元素
/// @return 返回插入是否成功
/// @retval ERROR(0):链表不存在,不可操作
/// @retval - ERR_OVERFLOW(-2):创建新结点失败,插入失败
/// @retval OK(1):插入成功
status xxx_push_front(myLinkList* plist, linkType x);
status xxx_push_front_(myLNode* phead, linkType x);


/// @brief 在链表尾部插入元素x,即尾插法
/// @param plist 链表指针
/// @param x 待插元素
/// @return 返回插入是否成功
/// @retval ERROR(0):链表不存在,不可操作
/// @retval - ERR_OVERFLOW(-2):创建新结点失败,插入失败
/// @retval OK(1):插入成功
status xxx_push_back(myLinkList* plist, linkType x);
status xxx_push_back_(myLNode* phead, linkType x);


/// @brief 删除链表首元结点,即头删法
/// @param plist 链表指针
/// @return 返回是否删除成功标志
/// @retval ERROR(0):链表不存在或链表为空,不可操作
/// @retval OK(1):删除成功
status xxx_pop_front(myLinkList* plist);
status xxx_pop_front_(myLNode* phead);


/// @brief 删除链表尾结点,即尾删法
/// @param plist 链表指针
/// @return 返回是否删除成功标志
/// @retval ERROR(0):链表不存在或链表为空,不可操作
/// @retval OK(1):删除成功
status xxx_pop_back(myLinkList* plist);
status xxx_pop_back_(myLNode* phead);

/// @brief 在位序pos处插入新结点
/// @param plist 链表指针
/// @param pos 位序
/// @param x 待插元素
/// @return 返回是否插入成功的标志
/// @retval ERROR(0):链表不存在,不可操作
/// @retval ERR_OVERFLOW(-2):新建结点失败,导致插入失败
/// @retval ERR_PARA(-1):插入失败,pos值小于1或大于size + 1
status xxx_insert(myLinkList* plist, int pos, linkType x);
status xxx_insert_(myLNode* phead, int pos, linkType x);

/// @brief 删除表中第pos个结点
/// @param plist 链表指针
/// @param pos 位序
/// @return status 是否成功删除的标志
/// @retval ERROR(0):表不存在或为空,不可操作
/// @retval ERR_PARA(-1):pos位序不合理,删除失败
/// @retval OK(1):删除成功
status xxx_remove(myLinkList* plist, int pos);
status xxx_remove_(myLNode* phead, int pos);


/// @brief 删除链表中元素值为x的第一个结点
/// @param plist 链表指针
/// @param x 待删元素
/// @return 返回是否删除成功的标志
/// @retval ERROR(0):链表不存在,不可操作
/// @retval FALSE(0):找不到x元素结点,删除操作失败
status xxx_removeX(myLinkList* plist, linkType x);
status xxx_removeX_(myLNode* phead, linkType x);

/// @brief 删除链表中元素值为x的第一个结点
/// @param plist 链表指针
/// @param x 待删元素
/// @return 返回是否删除成功的标志
/// @retval ERROR(0):链表不存在,不可操作
/// @retval FALSE(0):找不到x元素结点,删除操作失败
status xxx_remove_allX(myLinkList* plist, linkType x);
status xxx_remove_allX_(myLNode* phead, linkType x);
status xxx_remove_allX_1_(myLNode* phead, linkType x);
status xxx_remove_allX_2_(myLNode* phead, linkType x);

#endif // !__MYLINKLIST_H__

标签:结点,单链,定义,xxx,myLNode,DS,链表,retval,plist
From: https://www.cnblogs.com/kxwslmsps/p/17125248.html

相关文章

  • DS-单链表:初始化单链表
    一、定义单链表结构代码:typedefintlinkType; ///<定义链表结点数据域数据类型///@brief链表结点定义typedefstructt_linkNode{structt_linkNode*......
  • DS-单链表:清空单链表
    一、定义单链表结构代码:typedefintlinkType; ///<定义链表结点数据域数据类型///@brief链表结点定义typedefstructt_linkNode{structt_lin......
  • DS-单链表:销毁单链表
    一、定义单链表结构代码:typedefintlinkType; ///<定义链表结点数据域数据类型///@brief链表结点定义typedefstructt_linkNode{structt_lin......
  • DS-单链表:求链表结点个数
    一、定义单链表结构代码:typedefintlinkType; ///<定义链表结点数据域数据类型///@brief链表结点定义typedefstructt_linkNode{structt_lin......
  • DS-单链表:从键盘输入元素创建单链表
    一、定义单链表结构代码:typedefintlinkType; ///<定义链表结点数据域数据类型///@brief链表结点定义typedefstructt_linkNode{structt_lin......
  • DS-单链表:打印单链表
    一、定义单链表结构代码:typedefintlinkType; ///<定义链表结点数据域数据类型///@brief链表结点定义typedefstructt_linkNode{structt_lin......
  • Vue 自定义指令
      案例1:定义一个v-big指令,和v-text功能类似,但会把绑定的数值放大10倍<!DOCTYPEhtml><head><metacharset="UTF-8"/><scripttype="text/javascript"sr......
  • Wpf自定义菜单样式 Menu
    publicclassMenuItem{publiccharIcon{get;set;}publicstringName{get;set;}publicstringText{get;set;}publicstringTarget......
  • kx-顺序表:顺序表结构定义
    一、定义顺序表结构#defineINIT_SIZE10 ///<顺序表初始容量typedefintseqType; ///<定义顺序表元素类型///@brief顺序表结构定义typedefstructt_sqList{ s......
  • window检查和修复文件系统工具-chkdsk
    一、概述chkdsk的全称是checkdisk,就是磁盘检查的意思。这个东西是当你的系统崩溃或者非法关机的时候由系统来调用检查磁盘的,也可以由手工通过命令行调用来检查某......