1.尾插法

尾插法

头指针和尾指针都指向头结点,然后往里边插入元素,
每插入一个元素尾指针就后移一下

其中如下图所示 尾插法的核心代码是:

pointer->next = s; //pointer指向新生成的节点
pointer = pointer->next;//pointer移动至新节点位置

尾插法建立单链表的算法如下:

#include <stdio.h>
#include <stdlib.h>struct Test
{int data;struct Test *next;
};void printLinklist(struct Test *head) //验证链表打印函数
{struct Test *point = head;while(point != NULL){printf("the data of the Linklist is:%d\n",point->data);point = point->next;}
}struct Test* creatLinklistofBehind(struct Test *head)  //尾插法创建链表
{struct Test *now= NULL;struct Test *point = head;//head->data = 1;   //如果用方法一 便在头结点的data不存储数据while(1)  //循环建立链表{//动态申请一个名称为now的Node*指针类型的节点now = (struct Test*)malloc(sizeof(struct Test));now->next = NULL;             //初始化now的next指针为空指针,指向NULL printf("Please Input the data to the newLink:\n");scanf("%d",&(now->data));     //对data进行赋值if(now->data == 0)            //当data=0 时退出{printf("the data is 0:Quit!\n");printf("\n");free(now);                //释放now指针return head;              //返回Test型指针}//注意如果用方法一 便动态建立头节点,并head ,point=now的操作要同时进行,保证两指针都是指向 相同头节点地址if(head == NULL)              {head = now;point=now;}else{while(point->next != NULL){point = point->next;  //让point指针指向下一个结点,保证它指向链表尾部 }point->next = now;    //让point指针指向的结点的next成员指向新建结点now}}
}int main()
{//方法一 直接在creatLinklistofBehind 定义出头指针及其初始化struct Test *head = NULL;    //方法二 可以先动态申请一个名称为head的Test*指针类型的头节点/*head = (struct Test *)malloc(sizeof(struct Test));  head->next = NULL;            //初始化next=NULL*/head = creatLinklistofBehind(head);printLinklist(head);system("pause");return 0;
}

打印结果:

2.头插法

  • 头插法:从一个空表开始,重复读入数据,生成新节点,将读入的数据域存放到新结点的数据域中,然后将新结点插入到当前链表的表头结点之后,直至读入结束为止

其中如下图所示 头插法的核心代码是:

now->next = head;  //将头节点,赋值给新创建的下一个节点
head = now;     //将新创建的结点的地址赋给头指针的结点

头插法建立单链表的算法如下:

#include <stdio.h>
#include <stdlib.h>struct Test
{int data;struct Test* next;};void printLink(struct Test* head)  //链表打印检测函数
{   struct Test* point;point = head;while(point!=NULL){printf("%d",point->data);point = point->next;}
}struct Test* insertFromHead(struct Test *head,struct Test *now)  //头插法处理函数
{if(head == NULL){      //判断head是否创建有节点head = now;}else{now->next = head;  //将头节点,赋值给新创建的下一个节点head = now;     //将新创建的结点的地址赋给头指针的结点}return head;        //返回头节点
}struct Test* creatLink(struct Test *head)
{struct Test *now;while(1){now = (struct Test*)malloc(sizeof(struct Test)); //创建新节点,并开辟空间now->next = NULL;printf("input");scanf("%d",&now->data);if(now->data == 0){    //退出链表的创建printf("0退出\n");free(now);return head;}head = insertFromHead(head,now);  //调用函数循环插入节点}
}int main()
{struct Test* head=NULL;head = creatLink(head);printLink(head);system("pause");return 0;
}

打印结果:

(最详细)c语言尾插法头插法代码讲解相关推荐

  1. 单链表-史上最清晰的尾插法和头插法

    02.单链表-史上最清晰的尾插法和头插法 1.单链表 链表是一系列的存储数据元素的单元,通过指针(引用)串联起来的,因此每个单元至少有两个域,一个域用于数据元素的存储,另一个域是指向其他单元的指针. ...

  2. c语言随机生成字母链表,C语言 尾插法建立单链表 插入26个英文字母

    C语言 尾插法建立单链表 插入26个英文字母0 uosnmzer2016.09.13浏览131次分享举报 #include #include #include /* run this program ...

  3. c语言尾插法步骤,头插法-顺序输出,尾插法-反向输出(C语言)

    #include #include #include typedef struct node{ int data; struct node *next; }Node, *pNode; pNode re ...

  4. 单链表-单链表拆分为A和B链表(尾插法+头插法)

    题意: 设C{a1,b1,a2.b2-an,bn}为一线性表,采用带头结点的单链表hc存放,设计一个就地算法,将其拆分为两个线性表,每个线性表均采用带头结点的单链表存储,使得: A = {a1,a2. ...

  5. 链表笔记 (前插法 后插法 头插法 尾插法)

    链表 链表是一种物理存储单元上非连续.非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的.链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成.每个结点包括两个 ...

  6. (王道408考研数据结构)第二章线性表-第三节1:单链表的定义及其操作(插入和删除,建立之尾插和头插)

    文章目录 一:单链表相关 (1)单链表的定义 (2)头指针与头结点 二:单链表代码描述 三:单链表的初始化 四:单链表的插入 五:单链表的删除 六:单链表查找 (1)按位查找 (2)按值查找 七:单链 ...

  7. 单链表的尾插,头插,遍历,查找和插入

    单链表的基本结构 function Node(val,next){this.val = val;this.next = next || null; } 1.链表的创建 a.尾插法,就是正常的尾部顺序插 ...

  8. 146_路由器项目_附加功能:可以拿取文件内IP保存到过滤链表中,过滤IP也可以保存到txt文件,也可以终端输入IP,保存到文件【单链表的尾插、头插、删除指定节点、遍历等】】

    动图: ip_file.h: #ifndef IP_FILE_H #define IP_FILE_H #include <stdio.h> #include <string.h> ...

  9. C语言实现单链表头插法

    //链表结构 //a是数据域 //node是指针域 //typedef是结构体简化语句 //node用于后面初始化空间的时候取结构体的占用空间大小 //listnode是整个链表的头指针指向,即指向链 ...

最新文章

  1. JavaScript:对Object对象的一些常用操作总结
  2. inotify_add_watch使用注意
  3. 深入浅出Java中的clone克隆方法,写得太棒了!
  4. 2020 操作系统第四天复习(知识点总结)
  5. 不能装载文档控件。请在检查浏览器的选项中检查浏览器的安全设置_Excel基础—文件菜单之设置信息...
  6. 鸟哥学习笔记六(基础篇第十一章)
  7. 全国计算机等级考试题库二级C操作题100套(第05套)
  8. eclipse html插件_欲善事先利器——IDEA 插件篇
  9. 编译原理中词法分析的递归下降分析法实例--能被5整除的二进制数---c语言实现
  10. go error的理解
  11. 95-860-050-源码-定时器-InternalTimeServiceManager
  12. Java泛型你了解多少
  13. 网络通信框架 HP-Socket v5.5.1,支持可靠 UDP
  14. Python 中Python 为什么要继承 object 类
  15. Google Test Primer(四)——简单测试
  16. linux kernel directory
  17. 北京政协委员共商提高城市精治、共治、法治水平
  18. opencv-pythons实现图像周长面积(三角形)检测DIY整理
  19. html在一行内横向排列并排同行同时显示两个多个div盒子的方法
  20. JDK原生网络编程-NIO基础入门

热门文章

  1. 计算机网络第七版谢希仁著课后习题答案
  2. Hyperledger-indy indy-node部署文档
  3. HTML和JavaScript作直方图
  4. 遗传算法:交叉算法提高种群收敛速度
  5. Java复习笔记:Java常用的API
  6. Spring Boot 整合消息中间件 RocketMQ
  7. 简介------Comparable接口介绍及冒泡排序
  8. Kafka 是什么?
  9. css3 flex的IE8浏览器兼容问题
  10. 解决batis.binding.BindingException: Invalid bound statement (not found)