对于长度变化较大的线性表,预先分配空间必须按照最大空间分配时,会有空间利用不充足、线性表扩容难的问题。解决这些问题的办法就是采用链式储存结构。
线性表的链式储存结构是指用一组任意的储存单元储存线性表中的数据。为了反应数据元素之间的逻辑关系,对于每个数据元素,不仅要表示它的具体内容,还要附加一个表示它的直接后继元素的储存位置的信息,这两部分信息组成数据元素的存储映像,成为结点(Node)。单链表中的每个结点只包含一个指针域。
在线性表的链式储存结构中,为了方便插入和删除算法的实现,每个链表附加一个头结点,并通过头结点的指针唯一表示该链表。从该指针所指的头结点出发,沿着该节点的链可以访问到每一个节点。
单链表中的节点类型
typedef struct Node
{
int data;//数据域
struct Node *next;//指向下一个结点
}Node,*List;
单链表的初始化
void InitList(List plist)
{
assert(plist != NULL);
if(plist == NULL)
{
return;
}
plist->next = NULL;
}
单链表的头插法
该方法从一个空链表开始,读取元素val,生成新的结点,将读取的数据放到新结点的数据域中,然后将该新结点插入到当前链表的表头上。
bool Insert_Head(List plist, int val)
{
//创建新的结点
Node *p = (Node*)malloc(sizeof(Node));
p->data = val;<