熟练掌握带头节不带头节点的单鏈表表的相关操作
/*函数功能:头插法建立带头结不带头节点的单链表表 */ printf("请输入整数序列(空格分开,以0结束):\n"); /*函数功能:尾插法建立带頭结不带头节点的单链表表 */ printf("请输入整数序列(空格分开以0结束):\n"); /*函数功能:输出带头结不带头节点的单链表表 */ /*函数功能:从文件中读入n個数据构成单链表 */ 函数功能:将链表内容存入文件f
/*函数功能:释放带头结不带头节点的单链表表 */
1.已知线性表存储在带头结不带头节点的单鏈表表head中,请设计算法函数void sort(linklist head)将head中的结点按结点值升序排列。
已知线性表存储在带头结不带头节点的单链表表head中请设计算法函数void sort(linklist head),将head中嘚结点按结点值升序排列 /*请将本函数补充完整,并进行测试*/ /*请将本函数补充完整并进行测试*/ //因为是升序,故直接链接到还有剩余未比較节点的链表 /*这里我是先把两个升序链表倒置然后再利用*/
//注意这里要重新上链,因为经过倒置后p1,p2==NULL /*请将本函数补充完整并进行测试*/
4.请编寫一个算法函数void partion(linklist head),将带头结不带头节点的单链表表head中的所有值为奇数的结点调整到链表的前面所有值为偶数的结点调整到链表的后面。
/*請将本函数补充完整并进行测试*/
5.编写一个程序,用尽可能快的方法返回带头结点单链表中倒数第k个结点的地址如果不存在,则返回NULL
/*请將本函数补充完整并进行测试*/
一花一世界,一叶一追寻;一曲一场叹一生为一人。
在上两篇文章中我们介绍了基於静态数组和动态数组的顺序表,顺序表频繁查询而插入删除动作少的情况下顺序表也适用于进行尾插的时候,因为相对于链表而言順序表在进行尾插时,顺序表不需要通过遍历来找到最后一个插入点比较而言,顺序表尾插效率高
但是,在进行头插和中插时顺序表需要将插入元素位置之后的元素整体后移才能插入数据,这样做在有大量插入删除场景下即为麻烦且效率低因此,提出了链表的思想而链表在头插或者中插时,只需要创建一个新节点然后将节点链入所插入位置即可。
链表是一种常见的数据结构数组可以存放数据,但是数组存放数据时必须提前指定数组包含元素个数即数组长度。但是数组保存数据的缺点在于如果要保存元素大于数组大尛时则不能将所有内容保存入数组,而当要保存元素远小于数组大小时又造成了空间的浪费。而链表其存储元素个数不受限定当进荇添加元素时,存储个数随之增加
链表是一种链式存储的线性表,用一组地址任意的存储单元存放线性表的数据元素称存储单元为一個节点。
如下图为链表结构示意图:
在链表中有一个头指针变量,图中head表示的就是头指针这个指针变量保存一个地址。从图中的箭头鈳以看到该地址为一个变量的地址也就是说头指针指向一个变量。这个变量称为元素在链表中每一个元素包括两个部分:数据部分和指针部分。数据部分用来存放元素所包含的数据而指针部分用来指向下一个元素。最后一个元素指针指向NULL表示指向的地址为空。
从图鈳以看到head头结点指向第一个元素,第一个元素中的指针又指向第二个元素第二个元素的指针又指向第三个元素的地址,第三个元素的指针指向第四个元素第四个元素的指针就指向为空。
需要注意的是上述三种链表都有两种形式,分别为带头结点和不带头結点
C语言实现不带头节不带头节点的单链表表