单链表前插

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

相关推荐
依然鸣29 分钟前
PTA团体程序设计天梯赛L1真题讲解L1-077-080
开发语言·c++·算法·深度优先·pat考试·图论
库玛西2 小时前
现代 C++ 智能指针全景指南:从 RAII 思想到工业级实践
c语言·开发语言·c++·笔记·面试
liulilittle3 小时前
无锁并发容器的设计与实现原理
开发语言·c++·set·map·并发·无锁·lock-free
朋克洛德的码农3 小时前
Go并发-sync包四剑客:Mutex、RWMutex、WaitGroup、Once-从入门到原理
开发语言·后端·golang
qeen873 小时前
【数据结构】自平衡二叉搜索树各种旋转算法原理解析及AVL树的C++实现
数据结构·c++·算法
x²+(y-√³x²)²=13 小时前
Linux打包文件到Windows,文件/文件类型丢失
linux·运维·windows
淼澄研学4 小时前
Kimi API黑产倒卖技术解析与Python合规接入指南
开发语言·网络·python
冻柠檬飞冰走茶4 小时前
PTA基础编程题目集 7-35有理数均值(C++语言实现)
开发语言·数据结构·c++·算法·均值算法
wangchen_04 小时前
C++正则表达式
开发语言·c++·正则表达式
何以解忧,唯有..4 小时前
Python 元组(tuple)详解:使用、遍历与排序
开发语言·python