单链表前插

复制代码
#include<stdio.h>
#include<malloc.h>
typedef struct list biao;
struct list 
{
    int data;
    biao* next;

}list1;
void dataprint(biao* point)
{
    biao* list1 = point;
    while (list1 != NULL)
    {
        printf("%d->", list1->data);
        list1 = list1->next;
    }
    printf("NULL\n");
}
void frontset(biao** point1, int x)
{
  
    biao* point2 = (biao*)malloc(sizeof(biao));
    if (point2 == NULL)
    {
        printf("error about point2");
        return;
    }
    point2->data = x;
    point2->next =*point1;
    *point1 = point2;
}
int main()
{
    biao *good = NULL;
    frontset(&good, 1);
    frontset(&good, 2);
    frontset(&good, 3);
    frontset(&good, 4);
    dataprint(good);
    return 0;
}

解析:

1.good指针的类型是list结构体类型,它指向了单链表的开头,而不是指向一块特定的表

2.为什么good的初始值为NULL?因为单链表的结尾是NULL,这样便于下面的前插操作

3.frontset函数解析:

1.为什么要使用二级指针?因为操作必须给到结构体指针good,因为这步的操作是前插新的表块,而不是改变旧的表块,它的作用只是改变指针good指向的位置,所以要使用二级指针对一级指针good的引用进行操作。

2.检查机制:当malloc申请不到新空间时就会返回空指针NULL,此时报错并直接结束函数

3.定义一块要插入的表,用x给data赋值,而用next指向原来的表头,表示在访问完新加的表块后访问原来的表头,而再把表头赋值为要插入的表表示将前插的新表块作为新的表头进行使用

4.为什么空间没有与形参一起被释放?使用malloc没有free,则会在return 0处进行释放,所以函数结束后不会被释放,在平时使用malloc要释放其空间,但在前插表中这块空间是要被保留的,所以不free

4.dataprint函数解析:

1.每次循环都把打印的节点后推一块,从第一块表打印到最后一块表

相关推荐
invicinble19 分钟前
对服务器资源的理解--理解用户请求,部署,服务器资源相关的映射层
开发语言
漫步人生走在路上22 分钟前
用小语种SEO突破外贸B2B天花板:法语、德语市场的实测数据
开发语言·前端·javascript·人工智能·搜索引擎·ecmascript
yuniko-n30 分钟前
【JUC】线程池
java·开发语言
Helix25037 分钟前
WinPE 实战:从零制作纯净 Windows 安装与维护 U 盘
windows·安装·uefi·winpe·adk·u盘启动盘·dism
dwm8888888840 分钟前
c# 创建使用本地NuGet包
开发语言·c#
2601_962885721 小时前
如何用 Python 获取上证指数、沪深300、中证500 等指数行情?
开发语言·python
Logic1011 小时前
C语言/数据结构二维数组题解:找出行列O个数均为偶数的格子——奇偶性预处理+二次遍历
c语言·数据结构·算法·二维数组·时间复杂度·动态内存分配·奇偶性
张张123y1 小时前
后端第六课:Python 语法速通(0 基础入门,AI 应用开发的第一门语言)
开发语言·人工智能·python·ai·后端开发
Want5951 小时前
Python跳动的爱心①
开发语言·python·数学建模
ydjs678899-bot2 小时前
您的Next.js中间件匹配器配置可能会跳过您认为它保护的路由
开发语言·javascript·中间件