点击查看代码
/********************************************************************************************************
*
*
*
*
*
*
* Copyright (c) 2023-2024 cececlmx@126.com All right Reserved
* ******************************************************************************************************///指的是单向链表中的结点有效数据类型,用户可以根据需要进行修改
typedef int DataType_t;//构造链表的结点,链表中所有结点的数据类型应该是相同的
typedef struct LinkedList
{DataType_t data; //结点的数据域struct LinkedList *next; //结点的指针域}LList_t;//创建一个空链表,空链表应该有一个头结点,对链表进行初始化
LList_t * LList_Create(void)
{//1.创建一个头结点并对头结点申请内存LList_t *Head = (LList_t *)calloc(1,sizeof(LList_t));if (NULL == Head){perror("Calloc memory for Head is Failed");exit(-1);}//2.对头结点进行初始化,头结点是不存储有效内容的!!!Head->next = NULL;//3.把头结点的地址返回即可return Head;
}//创建新的结点,并对新结点进行初始化(数据域 + 指针域)
LList_t * LList_NewNode(DataType_t data)
{//1.创建一个新结点并对新结点申请内存LList_t *New = (LList_t *)calloc(1,sizeof(LList_t));if (NULL == New){perror("Calloc memory for NewNode is Failed");return NULL;}//2.对新结点的数据域和指针域进行初始化New->data = data;New->next = NULL;return New;
}//头插
bool LList_HeadInsert(LList_t *Head,DataType_t data)
{//1.创建新的结点,并对新结点进行初始化LList_t *New = LList_NewNode(data);if (NULL == New){printf("can not insert new node\n");return false;}//2.判断链表是否为空,如果为空,则直接插入即可if (NULL == Head->next){Head->next = New;return true;}//3.如果链表为非空,则把新结点插入到链表的头部New->next = Head->next;Head->next = New;return true;
}bool LList_TailInsert(LList_t *Head,DataType_t data)bool LList_DestInsert(LList_t *Head,DataType_t dest,DataType_t data)//遍历
void LList_Print(LList_t *Head)
{//对链表的头文件的地址进行备份LList_t *Phead = Head;//首结点while(Phead->next){//把头的直接后继作为新的头结点Phead = Phead->next;//输出头结点的直接后继的数据域printf("data = %d\n",Phead->data);}}int main(int argc, char const *argv[])
{return 0;
}