保姆级教程(1)——C语言链表基本知识详解


前言

废话不说,反正链表就是很重要。本文以单链表为例


一、预备知识

1.typedef 关键字

举例说明

typedef  int   U32;

typedef  struct  Student
{
      int score;
      char name[20];

}ST,*PST;

U32 i;     //U32 i;等价  int 32;
ST student; //ST student;  等价 struct  Student;
PST *pst;  //PST *pst;等价struct  Student *

为了方便,可以利用typedef 给某种数据类型起个别名;

二、链表

2.1定义

2.1.1 链表概念

链表属于一种离散的存储方式,离散是与连续相对的,数组是常见的连续存储方式。
链表就是一个表,表是有节点组成的。
1)n个节点离散分配;
2)彼此通过指针相连;
3)每个节点只有一个前驱节点,每个节点只有一个后继节点
4)首节点没有前驱节点尾节点没有后继节点

2.2专业术语

2.2.1 链表结构

链表如下图所示
图1
链表是由节点组成的,每个节点有两部分组成,分为数据域和指针域,数据域用来存放当前节点的数据,指针域用来存放指向下一个节点的指针变量
1)头节点:头节点数据类型与其他节点一样;是第一个有效节点之前的那一个节点;头节点并不存放数据,即数据域没有数据;加头节点的目的是方便对链表进行操作;
2)头指针:指向头节点的指针变量
3)首节点:第一个有效节点;
4)尾节点:最后一个有效节点
5)尾指针:指向最后一个有效节点的指针变量;

如果我们希望通过一个函数对链表进行处理,我们至少需要知道链表的头指针这个参数;

2.2.2 链表节点类型

链表的节点其实就是一个结构体变量,在这个变量中存放当前节点的数据以及指向下一个节点的指针变量,具体见代码所示:

typedef struct node
{
	int data;
	struct node * pnext;
}node ,*pnode;  

每个节点都是一个 node 型变量,变量的 pnext成员存放的是下一个节点的地址。

3.对链表数据的操作

3.1 插入一个节点

首先看图,
在这里插入图片描述
在没有插入节点c之前,a为b 的前驱节点(说b是c的后继节点也一样),若想在a与b之间插入节点c,只需要将a节点指针域的指针变量指向c节点,将c节点的指针域的指针变量指向b即可
若p指向节点a,q指向节点c,进行以下操作即可完成节点插入,详情见代码

pnode t;  //定义中间指针变量
t = p->pnext;
p->pnext = q;
q->qnext = t;

3.1 删除一个节点

还是首先看图
在这里插入图片描述

同样假设,p指针变量指向节点a,c指针变量指向节点c,若想删除节点b,将 节点a指针域的指针变量指向节点c即可,但是考虑到节约内存的效果,往往会对 p 结构体变量所占的内存空间进行释放,释放内存空间利用free()函数,另外,出于人性化考虑,在调用删除某个节点的时候,会对所删除节点的数据进行回传,以供其他需要。
看代码喽!

node t;
t = p->pnext->data;     //保存节点b数据域的数据
p->next = p->next->pnext;   //节点c的地址赋值给节点a的指针域的指针变量

总结

本文介绍了C语言链表的基本知识,下一篇将以代码的形式对 “如何对数组进行操作进行详细讲解”,欢迎大家指正!!!

  • 7
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值