一郎科技|就靠这20+张图了,一口气搞懂「链表」( 二 )
以结点的序列表示的线性表称作线性链表 , 也就是单链表 , 单链表是链式存取的结构 。
对于链表的每一个结点 , 我们使用结构体进行设计 , 其主要内容有:
其中 , DATA数据元素 , 可以为你想要储存的任何数据格式 , 可以是数组 , 可以是int , 甚至可以是结构体(这就是传说中的结构体套结构体)
NEXT为一个指针 , 其代表了一个可以指向的区域 , 通常是用来指向下一个结点 , 链表的尾部NEXT指向(空) , 因为尾部没有任何可以指向的空间了
故 , 对于一个单链表的结点定义 , 可以代码描述成:
//定义结点类型
typedefstructNode{
intdata;//数据类型 , 你可以把int型的data换成任意数据类型 , 包括结构体struct等复合类型
structNode*next;//单链表的指针域
}Node,*LinkedList;
//Node表示结点的类型 , LinkedList表示指向Node结点类型的指针类型
链表的初始化初始化主要完成以下工作:创建一个单链表的前置节点并向后逐步添加节点 , 一般指的是申请结点的空间 , 同时对一个结点赋空值 , 其代码可以表示为:
LinkedListlistinit{
Node*L;
L=(Node*)malloc(sizeof(Node));//开辟空间
if(L==){//判断是否开辟空间失败 , 这一步很有必要
printf("申请空间失败");
//exit(0);//开辟空间失败可以考虑直接结束程序
}
L->next=;//指针指向空
}
注意:一定要判断是否开辟空间失败 , 否则生产中由于未知的情况造成空间开辟失败 , 仍然在继续执行代码 , 后果将不堪设想啦 , 因此养成这样的判断是很有必要的 。
头插入法创建单链表利用指针指向下一个结点元素的方式进行逐个创建 , 使用头插入法最终得到的结果是逆序的 。 如图所示:
LinkedListLinkedListCreatH{
Node*L;
L=(Node*)malloc(sizeof(Node));//申请头结点空间
L->next=;//初始化一个空链表
intx;//x为链表数据域中的数据
while(scanf("%d",&x)!=EOF){
Node*p;
p=(Node*)malloc(sizeof(Node));//申请新的结点
p->data=https://pcff.toutiao.jxnews.com.cn/p/20200829/x;//结点数据域赋值
p->next=L->next;//将结点插入到表头L-->|2|-->|1|-->
L->next=p;
}
returnL;
}
尾插入法创建单链表如图所示为尾插入法的创建过程 。
//尾插法建立单链表
LinkedListLinkedListCreatT{
推荐阅读
- 无趣科技谈|X2凭实力拿下冠军,京东手机周销量榜单出炉,Find
- 毛毛科技说|三星S20+出现“小米价”,总算等到了,三星扛不住了
- 简简科技|余承东称鸿蒙体验已达安卓7成多,鸿蒙手机新进展
- ITheat热点科技|2020 | 坚持创新 舒尔带来MXA710音频解决方案,SSOT
- 空心|招聘丨山西千沐云物联科技有限公司
- LeoGo科技|科沃斯除菌地宝N8和米家扫拖机器人横评——两款解放双手的精品
- 小绿叶子科技|半年跌1000元,适合捡漏,iPhoneSE2扛不住了
- 电科技|“吃鸡”手游老是瞄不准?不妨选这款游戏外设配件
- 科技日日说|realme真我X7全方位评测:不一样的颜值,不一样的体验!,原创
- 硅谷聊科技|就不愿再用华为、小米了?,答案确认了!为啥很多人用了iPhone后