赞
踩
[Gitee](sllist/sllist · petrichor/2024-summer-c-language - 码云 - 开源中国 (gitee.com))
链表是⼀种物理存储结构上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。
类比火车地铁,都是一节一节的
在链表⾥,每节“⻋厢”是什么样的呢?
与顺序表不同的是,链表⾥的每节"⻋厢"都是独⽴申请下来的空间,我们称之为“结点/结点”。
结点的组成主要有两个部分:当前结点要保存的数据和保存下⼀个结点的地址(指针变量)。
1、链式机构在逻辑上是连续的,在物理结构上不⼀定连续
2、结点⼀般是从堆上申请的
3、从堆上申请来的空间,是按照⼀定策略分配出来的,每次申请的空间可能连续,可能不连续
链表的结构⾮常多样,以下情况组合起来就有8种(2x2x2)链表结构:
链表说明:
即不带头单向不循环链表
SList.h(其中方法会一一讲到)
#pragma once #include <stdio.h> #include <stdlib.h> #include <assert.h> typedef int SLTDataType; typedef struct SListNode { SLTDataType data; struct SListNode* next; }SLTNode; void creatlist(); SLTNode* SLTBuyNode(SLTDataType x); void printlist(SLTNode*); //插入 void SLTPushBack(SLTNode**, SLTDataType); void SLTPushFront(SLTNode**, SLTDataType); //删除 void SLTPopBack(SLTNode**); void SLTPopFront(SLTNode**); //查找 SLTNode* SLTFind(SLTNode* phead, SLTDataType x); //指定位置插入数据 void SLTInsert(SLTNode**, SLTDataType, SLTNode*); void SLTInsertAfter( SLTDataType, SLTNode*); //删除指定节点 void SLTErase(SLTNode**, SLTNode*); void SLTEraseAfter(SLTNode*); //销毁链表 void SListDestroy(SLTNode**);
test.c
养成好习惯,写一个方法测试一次,不然找错误的时候会很痛苦
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。