前言
本文主要介绍头插法、尾插法对单链表进行初始化。
一、单链表是什么?
线性表:将具有”一对一“逻辑关系的数据,线性地存储到物理空间的存储结构称之为线性表。
再根据数据在物理空间中,连续与否,分为顺序表和链表。
顺序表:使用数组来存储数据的线性表。
链表:使用指针来表示数据之间逻辑关系的线性表。
二、单链表初始化
1. 头插法
头插法的主要思想:头指针head始终指向最新增节点。
(1)先将a->next(新插入节点a的next)指向head->next(首元节点)
(2)将head指向当前最新的节点a
typedef struct LINK {
int elem;
struct LINK* next;
}link;
link* InitLINK()
{
link* head = (link*)malloc(sizeof(link)); //头指针始终指向最新(最前面)的节点
head->next = NULL;
for (int i = 1; i < 5; i++)
{
link* a = (link*)malloc(sizeof(link));
a->elem = i;
a->next = head->next; //每新增一个新节点,就指向上一轮的新增节点
head->next = a; //将head指向最新增的节点
}
return head;
}
2.尾插法
尾插法的主要思想:引入一个尾指针始终指向最后一个节点(最新增节点)。
(1)先将tail->next指向新增节点a
(2)再将尾指针tail指向最新节点tail->next
typedef struct LINK{
int elem;
struct LINK* next;
}link;
link* InitLink()
{
link* head = (link*)malloc(sizeof(link)); //创建头节点
link* tail = head; //尾部指针是移动的,始终指向当前list的最新(最尾部)的节点
for (int i = 1; i <= 5; i++)
{
link* a = (link*)malloc(sizeof(link));
a->elem = i;
a->next = NULL;
tail->next = a; //每新增一个新的节点,就放在尾指针后面
tail = tail->next; //移动尾指针,至当前最新的节点
}
return head;
}
总结
先画图理解,再写代码,会比较清晰。本文图片均引用自@仔仔木。
引用:
[1]http://t.csdnimg.cn/C3jN9
[2]https://c.weixueyuan.net/view/3338.html