链表的初步认识

##前言

链表的重要性自然不用多说,往往是C语言教材的最后一章,为以后数据结构与算法的学习稍稍埋下伏笔。

链表作为一种线性表,相对于基本数据类型———数组,有其优有其劣。

拿访问方式来说,数组的访问既可以通过下标来随机访问,也可以通过指针的加减运算来进行访问,为了便于如此访问,创建数组时往往需要在内存中开辟一段连续的内存空间,否则指针“加一个、减一个”搞不好就进入了其他数据的内存领域,这是很危险的。

拿操作方式来说,如果需要快速对数据进行增添或删减,用数组实现所造成的开销也是非常昂贵的。而链表就不需要连续的内存空间,它可以提高对“碎片内存”的利用效率,创建链表的时候动态分配一块内存即可,再用指针如穿针引线般将这些内存串起来即可,访问的时候再按指针指向一个一个遍历。举个例子,如果有一个array【100】,正需要在第三个元素array【2】和第四个元素array【3】之间插入一个新的数据,那就需要array【3】以后的数据都往后移一个位置,为新人腾出地方来。有人可能会说,这样也没什么吧。对,针对小数据而言差别可能不太大,但如果数组元素个数达到1000甚至10000,这样操作的代价就非常大,此时链表的优势又一次体现出来了。


##预备知识

结构体:

            先回顾一下基本数据类型

 

C语言中,结构体(struct)指的是一种数据结构,是C语言中聚合数据类型(aggregate data type)的一类。结构体可以被声明为变量指针数组等,用以实现较复杂的数据结构。结构体同时也是一些元素的集合,这些元素称为结构体的成员(member),且这些成员可以为不同的类型,成员一般用名字访问。总的来说,结构体是一种用户自定义类型的数据结构,用户可以按需要对基本类型进行组合,然后创建一种新的数据类型用户使用,当然也可以在结构体中包含结构体。在这里,有一种“道生一,一生二,二生三,三生万物”的智慧——你想要怎么玩你自己去组合,不要问我要数据类型了。


struct listNode
{
	//数据域,存储数据
	int data;
	//指针域,连接下个节点
	listNode *p;
}


##动手

1、链表的创建

     a.头插法

     b.尾插法

2、链表的查找

3、链表的删除

4、链表的反转

5、链表的排序




猜你喜欢

转载自blog.csdn.net/weixin_42348709/article/details/80645407
今日推荐