因为结构内存的差异,所以有头插法和尾插法两种形式。
本章博客主要讲解头插法
操作流程如下图
如下代码:
///插入元素,在指定的位置插入给定的值
//因为链表这种结构的内存是由程序员管理的,因此他的建立有一定的运算方法
//尾插法建立单链表(将逻辑上的顺序表放入单链表的物理结构当中)
/*
顺序表:12,33,44,76,89,90(逻辑上的顺序表)=>单链表
本例中我们用数组表示这种顺序表
*/
//arr:传入的顺序表,length:顺序表的长度
LinkListNode *create_Real_LkList(ElemType arr[],int length)
{
LinkListNode *pHead,*p,*q;
int i;//循环变脸用来遍历全部的顺序表
pHead = (LinkListNode*)malloc(sizeof(LinkListNode));
q = pHead; //q是获得了当前链表的头结点,q保存了pHead同时通过q不断前移是的链表串联起来
for(i=0;i<length;i++)
{
//获得一个单链表的结点,将这个结点加入到由pHead指向的链表当中
p = (LinkListNode *)malloc(sizeof(LinkListNode));
//p获得一个可以加入链表的结点单元
p->data = arr[i]; //将顺序表的内容存入单链表的结点
q->pNext = p; //
q = p;
}
p->pNext = NULL;
return pHead;
}
int main()
{
ElemType Myseq[] = {1,2,3,4,5};
create_Real_LkList(MySeq,5);
return 0;
}
尾插法总结:不断在声明了头结点的单链表之后,不断加入结点,直至最后一个结点的Next为NULL为止(1.动态获得pHead,2.用一个临时的指针变量q替代pHead,不断迁移,3.p是用来生成结点变量的,4.返回pHead来管理全部的链表。
版权声明:本文为weixin_43907175原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。