头插法建立单链表

article/2025/9/30 3:26:07

头插法建立单链表图示过程(其中an表示时间上第n个建立的节点,L为头指针,箭头表指向,sn代表an的地址)

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAc2lsZW5jZTI4MQ==,size_20,color_FFFFFF,t_70,g_se,x_16

结构体代码与主函数如下:

struct Link //创建一个结构体类型
{int data;  //数据域struct Link* p;  //指针域
};
struct Link* Creat_link(void); //建立单链表函数
void print(struct Link*);  //输出单链表函数
int main(void)
{struct Link * L;L = Creat_link();print(L);return 0;
}

单链表建立函数如下:

struct Link* Creat_link(void)
{struct Link* L, * s;//L是头指针int i, n, size;size = sizeof(struct Link);L = (struct Link*)malloc(size);//首先建立头结点L->p = NULL; //将头节点指针域赋值为空同时也为尾结点指针域置空做铺垫scanf("%d", &n); //输入想要建立的单链表长度if (n == 0){return L;}scanf("%d", &L->data);for (i = 1; i < n; i++){s = (struct Link*)malloc(size);//建立新的节点scanf("%d", &s->data);s->p = L->p;//把新的节点与后面的节点接上L->p = s;//把新的节点与头结点接上}return L;
}

/* 
这两行的代码是头插法的核心:
   s->p = L->p;
   L->p = s;
   要细细品味,这两行代码如果从逻辑上看第一次执行和第n(n>=2)次执行是不一样的
   第一次执行是把新建立的节点作为尾结点并且37行使其指针域为空,第n次执行时是把
   新建立的节点插入到头结点的下一个,37行使其与后面接上,38行使其与头结点接上
   */

输出函数如下:
 

void print(struct Link* L)
{if (L->p == NULL){printf("此链表为空");}else{while (1){printf("%d ", L->data);if (L->p == NULL) break;L = L->p;}}
}

注:本人小白,如有错误还望指教


http://chatgpt.dhexx.cn/article/RCm0lovn.shtml

相关文章

Java实现头插法

实现原理&#xff1a; 这是第一个头结点&#xff0c;现在要插入一个节点&#xff0c;也就是让新节点指向该头结点&#xff0c;任何让head指向新节点&#xff0c;新节点变为头结点。 代码实现&#xff1a; 实体类&#xff1a; public class entity {private String data;privat…

单链表的头插法

链表与顺序表不同链表是用一组任意的储存单元来存放线性表的结点&#xff0c;这组结点可以是连续的&#xff0c;也可以是非连续的&#xff0c;甚至可以是零散分布在内存的任何位置&#xff0c;为了能正确的去表达结点的逻辑关系&#xff0c;必须在储存元素值的同时&#xff0c;…

HashMap在JDK1.7版本头插法实现解析

HashMap在JDK1.7版本头插法实现解析 先解释下何为头插法。大家都知道HashMap在JDK1.7版本的数据结构为数组链表这样的形式。而头插法说的就是在往HashMap里面put元素时&#xff0c;此时新增在链表上元素的位置为链表头部&#xff0c;也就是数组桶位上的那个位置&#xff0c;故…

头插法链表反转c语言,用头插法反转链表

题目&#xff1a;输入一个链表的头结点&#xff0c;反转该链表&#xff0c;并返回反转后链表的头结点。 链表结点定义如下&#xff1a; typedef char item_t; typedef struct node { item_t item; struct node * next; } node_t; 分析&#xff1a; 使用头插法可以快速实现反转。…

链表头插法

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

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…