链式结构是学习数据结构时的基础,而单链表就是其中一种简单的形式,而要学习、了解和运用链式结构,最好的方法莫过于自己去实现它。
链表是由一个个的结点链接而形成的,所以链表就是由一个个结点构成的,那么结点的结构也就是至关重要的。
这就是最简单的无头单链表的结构体:
typedef int DataType;
typedef struct Node
{
DataType data;
struct Node* next;
}Node,*pNode,*pList;
接下来当然就是链表的初始化函数和销毁函数:
//初始化链表
void InitList(pList* pplist)
{
assert(pplist);
*pplist = NULL;
}
//销毁链表
void DestroyList(pList* pplist)
{
assert(pplist);
pNode cur = *pplist;
pNode del = *pplist;
//当cur不为NULL时,则说明链表中还有结点
while (cur)
{
del = cur;
cur = cur->next;
free(del);
del = NULL;
}
*pplist = NULL;
}
当我们想要在链表中插入新的结点的时候,第一步需要做的就是创建一个新的结点,所以一个创建新结点的函数也是必不可少的。
//创建一个新结点
pNode BuyNode(DataType data)
{
pNode newNode = (pNode)malloc(sizeof(Node));
newNode->data = data;
newNode->next = NULL;
return newNode;
}
初始化函数所初始化的链表只是一个空链表,里面什么也没有,当我们创建好新结点后,怎么插入就是一个新的问题。通常我们使用两种插入方法,链表