链表的创建

链表是数据结构的基础,也就是谁学好数据结构的基础就是学好链表,所以接下开我们就来看看链表是如何创建的吧!

生成单链表代码如下:


/*生成单链表*/

#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)


讲解如下:

image.png

对于这个代码其实注释的很清楚了就是分配了一个头节点,而pHead就是头指针,指向头节点。

2.
image.png

对于这行代码就是这个函数要返回一个头结点的地址也就是头指针给主函数中的pHead接受,使主函数中的pHead成为头指针,方便对该单链表的后续操作

其实我觉得最难的也是让我感觉到很棘手的就是<如何把新建的一系列链表串起来>。这应该才是最值得讲解的地方。

image.png

首先第一句话也是最简单,最容易理解的一句话,将val中临时保存的数据保存到pEnd指向的数据域中。
然后我通过图解的方式向大家说明

【1】在地二句话执行之前,应该如下:
image.png
右边那个是最新的结点,而pTail指向左边的结点(建立右边结点之前的最后一个结点)
【2】执行第二句话之后:
image.png
建立了中间的指向关系,也就是让新建的最后一个结点挂在了上一个结点后面

,实现了结点的串联(难点)

【3】
image.png
第三句话实际上就是将最后一个结点的pNext指针清空(如果后面不继续增加结点,那么这个结点就是尾节点,尾节点的指针域应该为空)
【4】
image.png
第四句话就是将pTail指向最后一个结点(pTail都应该指向最后一个结点)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值