上次咱们已经一起分享了线性表的顺序存储的基本创建以及一些运算方法的实现,那么这次咱们主要来研究线性表的链式存储,俗称单链表,咱们知道顺序表在建立的时候要注意需要建立一块连续的空间,所以需要使用数组在内存中开辟空间,但是有个问题,当数据很多时,就需要建立一大块连续的空间,内存中空间是有限的。建立连续的空间可能会影响到其他程序的使用,并且在运算当中,插入数据或者是删除数据会造成数据的成片移动,回消耗大量的时间,单链表就会很好的解决这个问题。
将线性表L=(a0,a1,……,an-1)中各元素分布在存储器的,不同存储块,称为结点,通过地址或指针建立它们之间的联系,所得到的存储结构为链表结构。表中元素ai的结点形式如图所示。
其中,结点的data域存放数据元素ai,而next域是一个指针,指向ai的直接后继ai+1所在的结点。于是,线性表L=( a0,a1,……,an-1)的结构如图所示。
(1)定义结点结构体 linklist_t
定义一个结构体,每一个结构体表示一个节点,节点里面包含要存储的数据以及指向下一个节点的指针。这样通过找寻下一个节点的地址来将数据联系在一起。
(2)创建一个链表 linklist_create( )
(3)头插法插入数据 linklist_head_insert( )
(4)打印数据 linklist_show( )
(5)判断链表是否为空 linklist_empty( )
(6)头删法删除数据 linklist_head_delete( )
定义一个指针,指向要删除的节点,主要是为了能够临时保存数据,然后进行指针指向的改变,最后释放指针,并将指针置为空。
(7)指定数据删除 list_delete_value( )
(8)尾插法插入数据 linklist_tail_insert( )
(9)按照顺序插入数据(自带排序功能) linklist_sort_insert( )
(10.1)按照指定位置插入 linklist_pos_insert( )
(10.2)将数据倒置 linklist_recover( )
例如将5 4 3 2 1排成1 2 3 4 5:
定义两个指针p、q,q指向被插入的数据,p指向q的下一个数据,当每次q插入时,p q往后移动
(11)更改数据 list_replace( )
(12)查找数据位置 list_search( )
(13)数据排列 list_merge( )
链表1数据1 2 5 7
链表2数据1 3 6 8
将其合成一个链表 1 1 2 3 5 6 7 8
创作不易,点赞+关注哦!!!