链表是数据结构的基础,也就是谁学好数据结构的基础就是学好链表,所以接下开我们就来看看链表是如何创建的吧!
生成单链表代码如下:
/*生成单链表*/
#include<stdlib.h>
#include<stdio.h>
typedef struct node{
int data;//数据域
node *pNext;//指针域
}Node;
Node* create_list(void);//声明函数
//主程序
int main(void){
Node* pHead = NULL;//初始化头指针
pHead = create_list();//创建一个非循环单链表
return 0;
}
//创建链表的实现函数
Node* create_list(void){
int len =0;//保存结点的个数
int val =0;//临时存放结点数据域的值
Node *pHead = (Node *)malloc(sizeof(Node));//分配头结点
if(pHead==NULL){
printf("分配失败!");
exit(-1);
}
Node *pTail = pHead;//定义一个指针始终指向最后一个结点以便时结点串起来
pTail->pNext = NULL;//清空最后一个结点的指针域
printf("请输入节点的个位:len");
scanf("%d",&len);
for(int i =0 ; i<len; i++){ //生成链表的核心算法
printf("请输入第%d个结点的数据\n",i+1);
scanf("%d",&val);
Node *pEnd = (Node *)malloc(sizeof(Node));
if(pEnd==NULL){
printf("分配失败!");
exit(-1);
}
pEnd->data = val;//将val临时保存的数据存到数据域中
pTail->pNext = pEnd;//使该次生成的一个结点挂在上次最后一个结点的后面
pEnd->pNext = NULL;//清空最后一个结点的指针域
pTail = pEnd;//使pTail始终指向最后一个结点
}
return pHead;
}
这个程序还有不足的地方就是把动态分布的内存手动释放掉(全是自己一字一字码出来的55555555)
讲解如下:
对于这个代码其实注释的很清楚了就是分配了一个头节点,而pHead就是头指针,指向头节点。
2.对于这行代码就是这个函数要返回一个头结点的地址也就是头指针给主函数中的pHead接受,使主函数中的pHead成为头指针,方便对该单链表的后续操作
其实我觉得最难的也是让我感觉到很棘手的就是<如何把新建的一系列链表串起来>。这应该才是最值得讲解的地方。
首先第一句话也是最简单,最容易理解的一句话,将val中临时保存的数据保存到pEnd指向的数据域中。
然后我通过图解的方式向大家说明
【2】执行第二句话之后:
,实现了结点的串联(难点)
【3】【4】