单链表前插

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

相关推荐
小羊没烦恼!5 天前
初探性能优化——2个月到4小时的性能提升
java·开发语言·windows·算法·c#
rockmelodies5 天前
# Windows Server2008 R2 Standard(SP1镜像U盘)重置本地管理员密码【完整详细步骤】
windows·密码破解
伞伞悦读5 天前
【第38期】Python 模块与包详解:import、from、模块搜索路径、包结构和 __init__
开发语言·python
m0_547486665 天前
《数据结构教程》全套 PPT课件2026
数据结构
C语言小火车5 天前
C/C++ 为什么需要编译器?
开发语言·c++
霍霍的袁5 天前
【C++】map 和 set 的使用 | 从用法到底层
开发语言·c++·学习·visual studio
孙启超5 天前
【AI开发之Rust】第 11 课:智能指针与内部可变性
开发语言·后端·rust
此生决int5 天前
深入理解C++系列(20)——C++11(下)
开发语言·c++
CoderYanger5 天前
A.每日一题:835. 图像重叠
java·开发语言·程序人生·leetcode·面试·职场和发展·学习方法
伞伞悦读5 天前
【第37期】Python JSON 与配置详解:序列化、反序列化、嵌套结构和配置文件
开发语言·python·json