链表-单链表创建

写在前面

1、在写链表之前,说实话一直很模糊,觉得理解了,但是一直没有自己敲出来,要用到链表了,一时又没有,特别是调试的时候,也会有时间,再次让我坚定了实践是检验标准的唯一真理。
2、记录是一种优秀的品质。

我理解的单链表

1、什么是单链表,我理解为就是一个链子,只要你抓住了链子的头,你就可以为所欲为。当然这个链子只有一个头。
2、每个链子都有固定的样子,也就是一个模板,模板里面有一个线,就是要把他们连接起来,也就是传说中指向同类的指针。

实现

1、模板定义

1、首先就是数据部分,这取决于你想把什么东西连起来,一个整型、一个字符串、一堆数据。因此一般是自定义数据类型,也就是结构体。
2、再次就是指针域了,这可是精华部分了,没有这个,链表就玩不起来。

2、生成头结点接口和节点接口

1、头结点,什么是头结点?就是首节点(首个有效结点)的前一个结点,要和首节点区分。使用头结点是为了方便对链表的操作。
2、每添加一个数据就要生成一个结点。

3、代码

1、定义数据结构

#define CARD_DEAL_VALUE	8		//比较字段键值的长度
#define CARD_DEAL_TIME	14		//保存当前时间的长度

///<[cct \@decard] | 链表数据
typedef struct CARD_INFO_struct
{
    
    
	unsigned char ucaCardKey[CARD_DEAL_VALUE+1]; //卡的CSN
	unsigned char ucDealTime[CARD_DEAL_TIME+1];  //交易时间

}CARD_INFO_T;

typedef struct LINK_CARD_INFO_struct
{
    
    
	CARD_INFO_T stCardInfo;
	struct LINK_CARD_INFO_struct *pNext;
	
}LINK_CARD_INFO_T;

2、创建

//创建头结点,并返回头结点指针
LINK_CARD_INFO_T *CreateLink(void)
{
    
    
    LINK_CARD_INFO_T *plink = (LINK_CARD_INFO_T *)malloc(sizeof(LINK_CARD_INFO_T));
    if( NULL == plink )
    {
    
    
        return plink;
    }
    //初始化数据
    memset(plink, 0, sizeof(LINK_CARD_INFO_T));
    return plink;
}
//创建结点,返回结点指针,并给结点进行赋值
LINK_CARD_INFO_T *CreateLinkNode(CARD_INFO_T data)
{
    
    
    LINK_CARD_INFO_T *pNode = (LINK_CARD_INFO_T *)malloc(sizeof(LINK_CARD_INFO_T));
    if( NULL == pNode )
    {
    
    
        return pNode;
    }
    //初始化,并赋值
    memset(pNode, 0, sizeof(LINK_CARD_INFO_T));
    pNode->stCardInfo = data;
    return pNode;
}

猜你喜欢

转载自blog.csdn.net/weixin_46089486/article/details/105859689