单链表前插

复制代码
#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.每次循环都把打印的节点后推一块,从第一块表打印到最后一块表

相关推荐
qh0526wy42 分钟前
金融接口基方法Python
windows·python·金融
景天科技苑43 分钟前
【Rust闭包】rust语言闭包函数原理用法汇总与应用实战
开发语言·后端·rust·闭包·闭包函数·rust闭包·rust闭包用法
uyeonashi2 小时前
【Boost搜索引擎】构建Boost站内搜索引擎实践
开发语言·c++·搜索引擎
再睡一夏就好2 小时前
从硬件角度理解“Linux下一切皆文件“,详解用户级缓冲区
linux·服务器·c语言·开发语言·学习笔记
TIF星空3 小时前
【使用 C# 获取 USB 设备信息及进行通信】
开发语言·经验分享·笔记·学习·microsoft·c#
Smile丶凉轩5 小时前
Qt 界面优化(绘图)
开发语言·数据库·c++·qt
reasonsummer5 小时前
【办公类-100-01】20250515手机导出教学照片,自动上传csdn+最大化、最小化Vs界面
开发语言·python
small_wh1te_coder6 小时前
从经典力扣题发掘DFS与记忆化搜索的本质 -从矩阵最长递增路径入手 一步步探究dfs思维优化与编程深度思考
c语言·数据结构·c++·stm32·算法·leetcode·深度优先
苏三福7 小时前
ros2 hunmle bag 数据包转为图片数据 python版
开发语言·python·ros2humble
qqxhb8 小时前
零基础学Java——第十一章:实战项目 - 桌面应用开发(JavaFX入门)
java·开发语言·javafx