1.链表的简介
链表中的数据是以结点来表示的。
每个结点的构成:元素(数据元素的映象) + 指针(指示后继元素存储位置)。
- 元素 就是存储数据的存储单元,
- 指针 就是连接每个结点的地址数据。
2.链表结构体的创建
typedef int DataType;//用typedef定义int类型的别名叫DataType
typedef struct SListNode {
DataType data; // 值
struct SListNode *pNext; // 指向下一个结点
} SListNode;
3.链表的初始化
// 初始化
void SListInit(SListNode **ppFirst)
{
//初始化则把头节点置空即可,申请空间会在需要时写出
*ppFirst = NULL;
}
4. 动态申请节点
static SListNode * BuyNewNode(DataType data)
{
SListNode *pNewNode = (SListNode *)malloc(sizeof(SListNode));
assert(pNewNode);
pNewNode->data = data;
pNewNode->pNext = NULL;
return pNewNode;
}
5.头部插入
void SListPushFront(SListNode **ppFirst, DataType data)
{
SListNode *newNode = BuyNewNode(data);//插入前肯定要买一个节点了
newNode->pNext = *ppFirst;
*ppFirst = newNode;
}
6.尾部插入
void SListPushBack(SListNode** ppFirst, DataType data)
{
//尾插肯定要买一个节点
SListNode *newNode = BuyNewNode(data);
//如果链表是空的,就把新节点给*ppfirst
if (*ppFirst == NULL)
{
*ppFirst = newNode;
return;
}
SListNode *pNode = *ppFirst;
for (pNode; pNode->pNext != NULL; pNode = pNode->pNext)
{
;
}
<