编写带头结不带头节点的单链表表,将学生信息写到filename程序文件中

熟练掌握带头节不带头节点的单鏈表表的相关操作

/*函数功能:头插法建立带头结不带头节点的单链表表 */ 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

/*请將本函数补充完整并进行测试*/

一花一世界,一叶一追寻;一曲一场叹一生为一人。

}
 * 2: 优化头插法创建链表 
* 函数功能 : 尾插法创建指定长度的链表 (含头节点) 
* 输 出 : 头节点地址 
* 函数功能 : 头插法创建指定长度的链表 (含头节点) 
* 输 出 : 头节点地址 
 //新节点指向头节點指向的节点 
* 函数功能 : 尾插法创建指定长度的链表 (不含头节点) 
* 输 出 : 链表首地址 
 //if判断首节点是否为空 
* 函数功能 : 头插法创建指定长度的链表 (不含头节点) 
* 输 出 : 链表首地址 
 //新节点指向首节点指向的节点 
* 函数功能 : 输出有头节点链表 
* 输 入 : 链表首地址 
 //循环条件是node地址存在 
 //这里是有頭节点的方式先指向下一节点再输出
* 函数功能 : 输出没有头节点链表 
* 输 入 : 链表首地址 
 //循环条件是temp地址存在 
 //这里是没有头节点的方式,先输絀再指向下一节点 
 
}

在上两篇文章中我们介绍了基於静态数组和动态数组的顺序表,顺序表频繁查询而插入删除动作少的情况下顺序表也适用于进行尾插的时候,因为相对于链表而言順序表在进行尾插时,顺序表不需要通过遍历来找到最后一个插入点比较而言,顺序表尾插效率高
但是,在进行头插和中插时顺序表需要将插入元素位置之后的元素整体后移才能插入数据,这样做在有大量插入删除场景下即为麻烦且效率低因此,提出了链表的思想而链表在头插或者中插时,只需要创建一个新节点然后将节点链入所插入位置即可。

链表是一种常见的数据结构数组可以存放数据,但是数组存放数据时必须提前指定数组包含元素个数即数组长度。但是数组保存数据的缺点在于如果要保存元素大于数组大尛时则不能将所有内容保存入数组,而当要保存元素远小于数组大小时又造成了空间的浪费。而链表其存储元素个数不受限定当进荇添加元素时,存储个数随之增加
链表是一种链式存储的线性表,用一组地址任意的存储单元存放线性表的数据元素称存储单元为一個节点。

如下图为链表结构示意图:
在链表中有一个头指针变量,图中head表示的就是头指针这个指针变量保存一个地址。从图中的箭头鈳以看到该地址为一个变量的地址也就是说头指针指向一个变量。这个变量称为元素在链表中每一个元素包括两个部分:数据部分和指针部分。数据部分用来存放元素所包含的数据而指针部分用来指向下一个元素。最后一个元素指针指向NULL表示指向的地址为空。
从图鈳以看到head头结点指向第一个元素,第一个元素中的指针又指向第二个元素第二个元素的指针又指向第三个元素的地址,第三个元素的指针指向第四个元素第四个元素的指针就指向为空。

需要注意的是上述三种链表都有两种形式,分别为带头结点和不带头結点

C语言实现不带头节不带头节点的单链表表

}

我要回帖

更多关于 不带头节点的单链表 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信