标签:运行 链表 技术分享 数组 组成 span def 第一个 idt
链表的定义:链表是一种物理存储上非连续,数据元素的逻辑顺序通过链表中的指针链接次序,实现的一种线性存储结构。
链表的特点:链表由一系列节点(链表中每一个元素称为节点)组成,节点在运行时动态生成(malloc),每个节点包括两个部分:
一个是存储数据元素的数据域
另一个是存储下一个节点的地址的指针域
一.单向链表的操作
1.链表的结构
? 链表由一个个节点构成,每个节点一般采用结构体的形式组织。
比如:typedef struct stu
{
int num;
float score;
struct stu *next;
}STU;
? 链表节点分为两个域
数据域:存放各种实际的数据,如:num、score等
指针域:存放下一节点的首地址
? 链表的一般结构如下:
? 链表的特点:
? 链表作为一个线性存储结构,链表的使用比数组更加灵活(数组都是在静态存储区中定义的数组)。
? 构造一个链表时,不一定在程序中指定链表的长度(节点个数),可以在程序的运行过程中动态的生成一个链表。
? 链表使用完后可以通过调用free释放节点的方式完成对整个链表空间的释放。
2.链表的创建
构建算法:首先申请一个链表节点,然后为该节点成员赋值,最后将链表节点添加到链表中
① 添加到链表尾部:顺序创建,新加入的节点放在链表尾部
? 当链表为空时,将链表头直接指向待添加节点(该节点成为了链表的第一个节点)
? 链表不为空时,首先遍历链表找到链表尾节点,然后将待添加节点挂接到尾节点上
②添加到链表头部:逆序创建,新加入的节点放在链表头部
? 当链表为空时,将链表头直接指向待添加节点(该节点成为了链表的第一个节点)
? 链表不为空时,首先将之前的第一个链表节点挂接到新插入的节点上,然后将链表头指向新插入的节点
3.链表的遍历:遍历输出链表所有节点
? 得到链表第一个节点的地址,即head的值
? 设一个临时指针变量p_mov,指向第一个节点head,即可获取p_mov所指节点的信息
? 使p_mov后移一个节点,即可访问下一节点,直到链表的尾节点(注意结尾判断条件)
4.链表的查找:按照指定关键字查找节点
? 得到链表第一个节点的地址,即head的值
? 设一个临时指针变量p_mov,指向第一个节点head,即可获取p_mov所指节点的信息
? 比较是否是要查找的节点
? 是,则返回相应节点地址,停止查找
? 不是,使p_mov后移一个节点,即可访问下一节点,直到链表的尾节点(注意结尾判断条件),最后若找不到返回NULL
5.链表的有序插入
6.链表的删除
7.链表的释放
标签:运行 链表 技术分享 数组 组成 span def 第一个 idt
原文地址:http://www.cnblogs.com/lemongirl/p/7906357.html