链表头插法

article/2025/9/30 3:36:49

头插法
从一个空表头指针开始,重复读入数据,生成新节点, 将读入数据存放到新节点的数据域中,永远是将新节点插入到当前链表的头节点的后面,第一个创建的节点是放在最后的,直到读入结束标志才停止创建。

在这里插入图片描述

#include <stdio.h>
#include <stdlib.h>
typedef struct Node{int date;			//数据域 struct Node *next;	//存储节点的地址 
}LNode,*Linklist;Linklist Creat_list(Linklist head);void Illustrate(Linklist head)//输出每个节点的数据域 函数 {Linklist tem = head;//将头指针的地址赋给临时的指针while(tem->next != NULL)//这个临时指针的值就是头指针的地址//然后这个临时指针指向的下一个地址 不断更替为当前的临时指针所在地址 {tem = tem->next ;printf("%d\n",tem->date );} }int main()
{Linklist head = NULL; //链表的头指针//head只是一个指针,在它malloc之前,它并没有date,也没有->next printf("head=%p\n",head );head = Creat_list(head);//创建链表 ,把头指针穿进去创建链表的函数 Illustrate(head);		//输出每个节点的数据域 system("pause");return 0;} /*头插法*//*从一个空表开始,重复读入数据,生成新节点,将读入数据存放到新节点的数据域中,然后将新节点插入到当前链表的表头节点之后,直到读入结束标志为止*/Linklist Creat_list(Linklist head){head = (Linklist)malloc(sizeof(LNode));//为头指针开辟内存空间if(head==NULL){printf("failure\n");exit(-1);} printf("第一次开辟head = %p\n",head );printf("第一次开辟head->next = %p\n",head->next );LNode *node = NULL;//定义新节点printf("初始化节点node=%p\n",node);int count = 0;//初始化创建节点的个数head->next = NULL;printf("初始化head->next = %p\n",head->next );node = head->next ;//将最后一个节点的指针域永远保持为NULL printf("\n"); printf("请输入节点个数:");scanf("%d",&count);for(int i = 0;i<count;i++){node = (Linklist)malloc(sizeof(LNode));//为新节点开辟内存空间printf("第%d个node = %p\n",i+1,node); printf("第%d个node->next = %p\n",i+1,node->next ); node->date  = i;			//为新节点的数据域赋值/*关键在于理解以下两句!!!*/node->next = head->next;  //将头指针所指向的下一个节点地址赋给新创建的节点的next head->next =node; //将新创建的节点的地址赋给头指针的下一个节点 printf("新node->next = %p\n",node->next );printf("新head->next = %p\n",head->next );}  return head; }

在这里插入图片描述
在这里插入图片描述

参考博文
自己再练习一下头插法

//自己练习一遍头插法
#include <stdio.h> 
#include <stdlib.h>
typedef struct NODE//定义节点结构体 
{int date;//数据域struct NODE *next;//指针域 
}NODE;void Print_linklist(NODE *head);NODE *Create_linklist(NODE *head);
int main()
{NODE *head = NULL;//声明一个head指针为空head = Create_linklist(head);Print_linklist(head);return 0;} /*头插法就是,在头节点之后不断插入新添加的新节点node,
并且每次新加节点都要改变head->next指向的地址为新添加节点的地址,
然后还要把新添加的节点  ->next 的地址 的改为上一个创建的节点的地址,
这是头插法最关键的两步 
头插法第一个创建的node为最后一个节点,指向NULL*/ NODE *Create_linklist(NODE *head){head = (NODE*)malloc(sizeof(NODE));//为头指针开辟内存 if(head == NULL){printf("failure\n");exit(-1);}NODE *node = NULL;					//声明NODE结构体指针类型的新节点node并初始化 //此时head!=NULL,node=NULLhead->next = NULL;int count;printf("请输入链表节点的个数:\n");scanf("%d",&count);int i;//循环变量 for(i=0;i<count;i++){node = (NODE*)malloc(sizeof(NODE));//为新节点开辟内存 //开辟内存之后呢,该node的地址是新开辟出来的,//不过呢,它里面的->next却是不会开辟出来的哦,//每次开辟新的node里面的->next一直都会是同一个。node->date = i;node->next = head->next ;head->next = node; } return head;} void Print_linklist(NODE *head){while(head->next != NULL){head = head->next ;//head是空节点,上面没有存放date,要head的下一个才有存放数据 printf("head->date = %d\n",head->date );}}

在这里插入图片描述
接下来练习一下不用for,而是用while的情况,把以上代码从int count;到整个for循环结束的这块修改为

    int date;printf("请为节点数据域输入整数date:\n");scanf("%d",&date);printf("当输入date为0时停止创建节点。\n");while(date) {node = (NODE*)malloc(sizeof(NODE));node->date = date;node->next = head->next ;head->next = node; scanf("%d",&date);}

http://chatgpt.dhexx.cn/article/6GXgENKk.shtml

相关文章

HashMap头插法

HashMap在1.8&#xff08;不含&#xff09;之前对于新增元素的hash冲突的链表插入采用的是头插法&#xff0c;1.8之后开始改用尾插法。那么头插法有什么问题呢&#xff1f;为什么改用尾插法呢&#xff1f;源码学习一下咯 HashMap-jdk1.7.0_80 put新增map元素 public V put(K…

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

1.尾插法 尾插法 头指针和尾指针都指向头结点&#xff0c;然后往里边插入元素&#xff0c; 每插入一个元素尾指针就后移一下 其中如下图所示 尾插法的核心代码是&#xff1a; pointer->next s; //pointer指向新生成的节点 pointer pointer->next;//pointer移动至新…

头插法和尾插法总结(动图版)

代码使用结构体&#xff1a; typedef struct Node{int value;struct Node* next; }*Link;头插法&#xff1a;利用头指针控制链表节点的增加。 核心&#xff1a; newNode->next head->next; head->next newNode; //头插法创建链表 Link headCreateLink(int n){//头指…

头插法和尾插法建立单链表详解与实现

写在前面&#xff1a;本文使用C语言和C引用&#xff0c;学C和C的同学都是可以看懂的&#xff0c;C毕竟向下兼容C。很详细&#xff0c;一篇能搞懂代码和原理。 先来了解几个简单概念 单链表就是线性表的链式存储&#xff1b; 头结点&#xff1a;单链表在第一个结点之前附加了一个…

链表的三种插入方法(头插法,尾插法,任意位置插入)

插入作为链表的四大基本操作之一&#xff08;增删改查&#xff09;&#xff0c;通常都会借助插入的方法增添信息&#xff0c;这一部分为大家着重讲解插入法。 1.头插法 简而言之&#xff0c;就是从链表的头部进行一个插入&#xff0c;定义一个结构体指针的新节点&#xff0c;…

【数据结构】:单链表之头插法和尾插法(动图+图解)

头插法和尾插法 一、头插法&#x1f4a4;思考一&#xff1a;头插法的核心是什么❓❗❗ 重点一&#xff1a;以带头结点方式实现头插法❗❗ 重点二&#xff1a;以不带头结点方式实现头插法 二、尾插法&#x1f4a4;思考二&#xff1a;尾插法的核心是什么❓❗❗ 重点三&#xff1a…

链表:头插法与尾插法(简易图解和代码)

头插法 定义&#xff1a;输入的数据次序生成的链表节点次序相反&#xff0c;例如&#xff1a;按1,2,3顺序进行头插之后&#xff0c;最终排序却变成了3,2,1。简而言之就是逆序插入。 定义图解&#xff1a; 代码图解&#xff1a; 代码&#xff1a;&#xff08;使用头插法建立单…

未声明的标识符

出现未声明的标识符错误&#xff0c;有可能是真的没有声明。但是也有可能是代码中有些注释&#xff0c;格式不对&#xff0c;导致声明的变量的作用域提前结束了。可以把注释都删掉试试

c2065 未声明的标识符 解决ok

场景1&#xff1a; cv::Mat pad_img; cv::Mat img; img 在一个if else后面声明&#xff0c;就报错了 解决方法&#xff0c;把cv::Mat 声明放到前面就行了&#xff0c;原因未知。 场景2&#xff1a; int a3; a为未声明的标识符&#xff0c;加了各种头文件&#xff0c;都不起…

已经包含头文件仍然出现,错误C2065“未声明的标识符”

由于当前在往一个比较大的项目中添加文件&#xff0c;文件又有相似性所以采取了复制的方式&#xff0c;最后出现了一个大疏漏。 在总的.cpp文件中调用新文件中的函数&#xff0c;在包含了新文件的.h头文件的情况下仍然说没有找到标识符&#xff0c;在网上找了很多方法&#xff…

c++: “default”: 未声明的标识符

c&#xff1a; “default”: 未声明的标识符 c&#xff1a; “default”: 未声明的标识符 1、错误描述 2、错误原因&#xff1a; 3、解决方案&#xff1a; 1、错误描述 错误 C2065 “default”: 未声明的标识符 2、错误原因&#xff1a; C11 标准的新特性…

C++命名空间namspace解析——“cout”未声明的标识符,“cin”未声明的标识符

首先我们先看一下下面这段代码运行时的情况&#xff08;注意按ctrlF5 运行&#xff09; #include<iostream> int main() {return 0; }运行结果如下 是一个没有任何结果的窗口 现在我们再加上一段输出代码 cout<<"hello"<<endl;会发现编译运行时…

error C2065: “string”: 未声明的标识符//error C2065: “vector”: 未声明的标识符

添加头文件没&#xff0c; #include <stdio.h> #include <string.h> #include #include using std::vector; #include <stdio.h> #include <string.h> #include <iostream> #include <vector> using std::vector;就这样&#xff0c;先&…

使用控件时提示未声明标识符的解决方法

环境&#xff1a;VS2012&#xff0c;Win8.1 64bit 参考&#xff1a; http://www.cnblogs.com/Romi/archive/2012/01/06/2314390.html http://zhidao.baidu.com/question/256304139.html 1. 用MFC默认创建Dialog类型项目&#xff0c;里面有个VS默认添加的CStatic控件 2. 如果…

引入头文件结构体,解决未声明标识符fileinfo

首先我问大佬&#xff0c;大佬让我右键单击结构体_finddata_t,找下它的定义&#xff0c;但是我没找到啥。然后大佬说让我引入结构体所在的头文件。我就右键单击_finddata_t&#xff0c;联机搜索&#xff0c;找到了它所在的头文件io.h&#xff0c;成功解决了未声明标识符fileinf…

未声明标识符怎么解决oracle,请问 什么是“未声明的标识符”错误,如何解决?...

月关宝盒 它们通常来自忘记包含包含函数声明的头文件&#xff0c;例如&#xff0c;此程序将给出“未声明的标识符”错误&#xff1a;缺少标题int main() { std::cout < return 0;}要修复它&#xff0c;我们必须包含标题&#xff1a;#include int main() { std::cout < re…

vs编译运行报错:未声明的标识符

报错如下图&#xff1a; 很奇怪&#xff0c;我这个testList是已经声明的&#xff0c;就在上一行&#xff0c;但是还是会给我报错&#xff1a;未声明的标识符。 最后发现原因是在报warning的地方。 解决办法&#xff1a; 在代码处右击出现菜单栏&#xff0c;点击最下方的【保存…

未声明标识符怎么解决oracle,什么是“未声明的标识符”错误,如何解决?

潇潇雨雨 它们通常来自忘记包含包含函数声明的头文件&#xff0c;例如&#xff0c;此程序将给出“未声明的标识符”错误&#xff1a;缺少标题int main() { std::cout < return 0;}要修复它&#xff0c;我们必须包含标题&#xff1a;#include int main() { std::cout < re…

插值算法的介绍及其在数学建模中的应用

目录 插值算法的介绍及其在数学建模中的应用 一、插值的介绍及其作用 二、插值法原理 三、插值法的分类 1、普通多项式插值 2、分段低次插值 3、&#xff08;三次&#xff09;样条插值 4、分段三次埃尔米特&#xff08;Hermite&#xff09;插值 插值算法的介绍及其在数…

插值方法学习

0.摘要 我感觉上采样阶段要放在特征提取的前期&#xff0c;而不是后期&#xff0c;因为后期的feature map太小了&#xff0c;而且相邻间的像素值会存在突变&#xff0c;会造成增加的噪声概率会比较高。参考图像插值技术综述学习了一下插值方法 1.单线性插值法 已知ac&#xf…