数据结构:单链表

链表和顺序表一样,都是线性表,逻辑结构上是线性的,但不同的是,链表在物理结构上不是线性的

链表是由一个一个节点构成的,一个节点分为两部分:存储的数据和指针(结构体指针)

其中的指针存储的是该节点指向的下一个节点的地址

一个节点的结构体可以这样表示:

cpp 复制代码
typedef int SLDataType;
typedef struct SListNode
{
    int date;
    struct SListNode* next;
}SLTNode;

一.链表的打印

cpp 复制代码
void SLTPrint(SLNode * phead)
{
    SLTNode* pcur = phead;
    while(pcur != NULL)
    {
        printf("%d->",pcur->data);
        pcur = pcur->next;
    }
    printf("NULL\n");
}

二.链表的尾插

cpp 复制代码
void SLTPushBack(SLTNode** pphead,SLTDataType x)
{
    if(pphead == NULL)//如果为空,则根本不存在链表,自然不能插入
        return;
    SLTNode* newnode = (SLTNode*)malloc(sizeof(SLTNode));
    newnode->data = x;
    newnode->next = NULL;

    //链表存在,但是内容为空,新节点作为phead
    if(*pphead == NULL)
        *pphead = newnode;
    return;
    //链表不为空
    SLTNode* ptail = *pphead;
    while(ptail->next != NULL)
        ptail = ptail->next;

     ptail->next = newnode;
}

注意:需要改变的是指针的值,因此在传参时需要传入指针的地址,,因此函数需要一个二级指针作为形参

三.链表的头插

cpp 复制代码
//申请一个新节点
SLTNode* SLTBuyNode(SLTDataType x)
{
    SLTNode* newnode = (SLTNode*)malloc(sizeof(SLTNode));
    newnode->data = x;
    newnode->next = NULL;

    return newnode;
}
void SLTPushFront(SLTNode** pphead,SLTDataType x)
{
    if(pphead == NULL)//如果为空,则根本不存在链表,自然不能插入
        return;
    SLTNode* newnode = SLTBuyNode(x);
    
    newnode->next = *pphead;
    *pphead = newnode;
}

四.链表的尾删

cpp 复制代码
void SLTPopBack(SLTNode** pphead)

{
    if(pphead == NULL)
        return;
    
    if(*pphead == NULL)
        return;
    
    //链表只有一个节点
    if((*pphead)->next == NULL)
        free(*pphead);
        *pphead = NULL;
        return;

    //链表有多个节点
    SLTNode* ptail = *pphead;//尾节点
    SLTNode* prev = NULL;//尾节点的前一个节点
    while(ptail->next != NULL)
    {
        prev = ptail;
        ptail = ptail->next;
    }
    prev->next = NULL;
    free(ptail);
    ptail = NULL;
}
相关推荐
糖果店的幽灵36 分钟前
Pandas DataFrame 数据结构详解
数据结构·pandas
起个破名想半天了2 小时前
算法与数据结构之Dijkstra算法
数据结构·dijkstra·单源最短路径·迪杰斯特拉算法
啦啦啦啦啦zzzz2 小时前
数据结构:哈夫曼编码
数据结构·c++·哈夫曼编码
ChillCoding3 小时前
更新中:C++ STL库,查找排序(基础算法),数据结构,数学算法,竞赛相关基础
数据结构·c++·算法
apcipot_rain4 小时前
计科八股20260606——二叉树、PCA、图深度学习、进程上下文、C语言预编译、文件读写、单精度浮点数
c语言·数据结构·算法·pca·图神经网络
落羽的落羽4 小时前
【项目】JsonRpc框架——开发实现2(业务层)
linux·数据结构·c++·人工智能·算法·json·动态规划
SHARK_pssm4 小时前
【数据结构——单链表】
数据结构·经验分享·笔记
lightqjx4 小时前
【算法】数据结构_并查集
数据结构·算法·并查集
小蒋学算法4 小时前
算法-掉落的方块-线段树
数据结构·算法
Brilliantwxx4 小时前
【算法从零到千】【8-15】滑动窗口
数据结构·算法