数据结构之链表基本操作

来源:互联网 发布:计算器编程 编辑:程序博客网 时间:2024/06/03 04:39
链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。 相比于线性表顺序结构,操作复杂。由于不必须按顺序存储,链表在插入的时候可以达到O(1)的复杂度,比另一种线性表顺序表快得多,但是查找一个节点或者访问特定编号的节点则需要O(n)的时间,而线性表和顺序表相应的时间复杂度分别是O(logn)和O(1)。
使用链表结构可以克服数组链表需要预先知道数据大小的缺点,链表结构可以充分利用计算机内存空间,实现灵活的内存动态管理。但是链表失去了数组随机读取的优点,同时链表由于增加了结点的指针域,空间开销比较大。链表最明显的好处就是,常规数组排列关联项目的方式可能不同于这些数据项目在记忆体或磁盘上顺序,数据的存取往往要在不同的排列顺序中转换。链表允许插入和移除表上任意位置上的节点,但是不允许随机存取。链表有很多种不同的类型:单向链表,双向链表以及循环链表。链表可以在多种编程语言中实现。像Lisp和Scheme这样的语言的内建数据类型中就包含了链表的存取和操作。程序语言或面向对象语言,如C,C++和Java依靠易变工具来生成链表。
上述的这段文字摘自百度百科对链表的解释,就我个人来看,链表与数组的最大区别在于:(1)链表存储结构是不连续的,对链表的操作只能是指针,而数组的单元连续,可以进行下标访问;(2)从数据的效率来讲,链表访问一个元素时,必须要在链表上遍历,而对于数组来说,直接对下标操作就能完成访问,时间复杂度降低,(3)链表和数组在元素的删除和插入时有很大的区别,在一个数组上插入和删除,往往牵扯到移动大量元素,时间复杂度高,然而链表只需找到插入、删除的位置直接进行插入和删除,时间复杂度低。
接下来,简单介绍单向链表的基本操作:
1.单向链表的创建:

首先定义结构体ElemSN,其中有两个成员,一个是数据域,一个是指针域;CreatLink 为创建链表的函数,参数为整型数组和数组的长度,返回值为结构体指针(头结点);
2.单向链表的遍历:

3.单向链表的数据域由小到大进行排序

其基本思路是:在原链表上找到最小值后,尾插到一个以h为新的头结点的链表上,最后返回新链表的头结点地址!!!!
0 0
原创粉丝点击