C/C++之链表的建立

个人主页:点我进入主页

专栏分类:C语言初阶      C语言程序设计————KTV       C语言小游戏     C语言进阶

C语言刷题

欢迎大家点赞,评论,收藏。

一起努力,一起奔赴大厂。

目录

1.头插

1.1简介

 1.2代码实现头插

1.3分析代码

2.尾插 

2.1简介

2.2代码

2.3分析代码


 

      学习了结构体后,我给大家带来一种利用结构体写链表的代码,链表是数据结构之一,其中的数据呈线性排列。在链表中,数据的添加和删除都较为方便,就是访问比较耗费时间链表在以后的数据结构中有很重要的作用,链表的写法分为两种,一种是头插,一种是尾插,这两种不同的写法带来哪些有趣的现象呢?让我们往下看。

1.头插

1.1简介

我们现象想一下,链表就是一些数据通过某种方式进行连接,我们可以大概的画成

 1.2代码实现头插

#include <stdlib.h>
#include <stdio.h>
struct ListNode {int data;struct ListNode* next;
};
struct ListNode*p=NULL,*head=NULL;
struct ListNode* createlist()
{int num;scanf("%d", &num);while (num != -1){p = (struct ListNode*)malloc(sizeof(struct ListNode));p->data = num;p->next = head;head = p;scanf("%d", &num);}
}

1.3分析代码

        在这里需要我们先创建一个结构体,它包含数据部分和指针部分,在进行创建链表时我们需要先创建一个struct ListNode类型的指针*p和*head,他们有不同的作用,p是用于创建节点,head是用于节点的链接和记录头结点的位置。具体分析如下:我们先对各个节点进行分配内存,也就是p=(struct ListNode*)malloc(sizeof(struct ListNode)),然后进行数据的初始化,也就是对p中的date进行赋值,让p指向的next指向head,第一次head指向NULL由于我们是头插,需要最后一个节点指向空,我们头插是在节点前创建节点也就是说新的p是头节点,不断改变头节点,我们让head指向p方便了节点的连接和记录头节点的位置。当我们按链表打印数据时是逆序输出。

2.尾插 

2.1简介

尾插不同于头插,它相较于头插更难理解,但是进行遍历时是按输入顺序进行打印。

2.2代码

#include <stdlib.h>
#include <stdio.h>
struct stud_node {int              num;      /*学号*/char             name[20]; /*姓名*/int              score;    /*成绩*/struct stud_node* next;    /*指向下个结点的指针*/
};
struct stud_node* head, * tail;
void input()
{struct stud_node* p;int nums;scanf("%d", &nums);head = NULL;while (nums != 0){p = (struct stud_node*)malloc(sizeof(struct stud_node));p->num = nums;scanf("%s", p->name);scanf("%d", &p->score);p->next = NULL;if (head == NULL){head = p;tail = p;}else{tail->next = p;tail = p;}scanf("%d", &nums);}
}

2.3分析代码

        同样需要我们先进行创建结构体,它包含数据部分和指针部分,在进行创建链表时我们需要先创建一个struct ListNode类型的指针*p和*head,以及*tail,他们有不同的作用,p是用于创建节点,head是记录头结点的位置,tail是用于节点的链接。具体分析如下:我们先对各个节点进行分配内存,也就是p=(struct ListNode*)malloc(sizeof(struct ListNode)),然后进行数据的初始化,也就是对p中的date进行赋值,p的next指向空这一步很重要,如果缺少这一步会导致链表的尾节点的next成为野指针,特别注意在进入循环前需要对tail,和head进行初始化,也就是指向空,我们第一次需要让head指向p,tail指向p,然后再此进入循环,这时我们可以画成

这时我们让tail的next指向p然后移动tail让他指向p也就是 

这样就完成了链表的连接。

今天的内容就结束了,希望大家可以学会链表的两种建立方式,最后不要忘记一键三连呦。 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/126259.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Android Framework系列】第14章 Fragment核心原理(AndroidX版本)

1 简介 Fragment是一个历史悠久的组件&#xff0c;从API 11引入至今&#xff0c;已经成为Android开发中最常用的组件之一。 Fragment表示应用界面中可重复使用的一部分。Fragment定义和管理自己的布局&#xff0c;具有自己的生命周期&#xff0c;并且可以处理自己的输入事件。…

代码随想录笔记--回溯算法篇

1--回溯算法理论基础 回溯算法本质上是一个暴力搜索的过程&#xff0c;其常用于解决组合、切割、子集、排列等问题&#xff0c;其一般模板如下&#xff1a; void backTracking(参数){if(终止条件){// 1. 收获结果;// 2. return;}for(..遍历){// 1. 处理节点// 2. 递归搜索// 3.…

K8S 基础概念学习

1.K8S 通过Deployment 实现滚动发布&#xff0c;比如左边的ReplicatSet 的 pod 中 是V1版本的镜像&#xff0c;Deployment通过 再启动一个 ReplicatSet 中启动 pod中 镜像就是V2 2.每个pod 中都有一个pause 容器&#xff0c;他会连接本pod中的其他容器&#xff0c;实现互通。p…

【Java】基于SSM的单位人事管理系统

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用JSP技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…

[Linux]动静态库

[Linux]动静态库 文章目录 [Linux]动静态库见一见库存在库的原因编写库模拟编写静态库模拟使用静态库模拟编写动态库模拟使用静态库 库的加载原理静态库的加载原理动态库的加载原理 库在可执行程序中的编址策略静态库在可执行程序中的编址策略动态库在可执行程序中的编址策略 见…

储能直流侧计量表DJSF1352

安科瑞 华楠 具有CE/UL/CPA/TUV认证 DJSF1352-RN导轨式直流电能表带有双路直流输入&#xff0c;主要针对电信基站、直流充电桩、太阳能光伏等应用场合而设计&#xff0c;该系列仪表可测量直流系统中的电压、电流、功率以及正反向电能等。在实际使用现场&#xff0c;即可计量总…

LT8711HE 是一款高性能的Type-C/DP1.2到HDMI2.0转换器

概述&#xff1a; LT8711HE是一种高性能的Type-C/DP1.2到HDMI2.0转换器&#xff0c;设计用于连接USB Type-C源或DP1.2源到HDMI2.0接收器。LT8711HE集成了一个DP1.2兼容的接收器&#xff0c;和一个HDMI2.0兼容的发射机。此外&#xff0c;还包括两个CC控制器&#xff0c;用于CC通…

自然语言处理——数据清洗

一、什么是数据清洗 数据清洗是指发现并纠正数据文件中可识别的错误的最后一道程序&#xff0c;包括检查数据一致性&#xff0c;处理无效值和缺失值等。与问卷审核不同&#xff0c;录入后的数据清理一般是由计算机而不是人工完成。 ——百度百科 二、为什么要数据清洗 现实生…

bboss 流批一体化框架 与 数据采集 ETL

数据采集 ETL 与 流批一体化框架 特性&#xff1a; 高效、稳定、快速、安全 bboss 是一个基于开源协议 Apache License 发布的开源项目&#xff0c;主要由以下三部分构成&#xff1a; Elasticsearch Highlevel Java Restclient &#xff0c; 一个高性能高兼容性的Elasticsea…

java开发之个人微信的二次开发

简要描述&#xff1a; 修改我在某群的昵称 请求URL&#xff1a; http://域名/updateIInChatRoomNickName 请求方式&#xff1a; POST 请求头Headers&#xff1a; Content-Type&#xff1a;application/jsonAuthorization&#xff1a;login接口返回 参数&#xff1a; 参…

Python标准数据类型-List(列表)

✅作者简介&#xff1a;CSDN内容合伙人、阿里云专家博主、51CTO专家博主、新星计划第三季python赛道Top1&#x1f3c6; &#x1f4c3;个人主页&#xff1a;hacker707的csdn博客 &#x1f525;系列专栏&#xff1a;零基础入门篇 &#x1f4ac;个人格言&#xff1a;不断的翻越一座…

备份StarRocks数据到对象存储minio中/外表查minio中的数据

1.部署minio环境 docker pull minio/minio宿主机与容器挂在映射 宿主机位置容器位置/data/minio/config/data/data/minio/data/root/.minio 拉起环境&#xff1a; docker run -p 9000:9000 -p 9090:9090 --name minio \ -d --restartalways \ -e "MINIO_ACCESS_KEYadm…

基于Dubbo实现服务的远程调用

目录 前言 RPC思想 为什么使用Dubbo Dubbo技术框架 ​编辑 调用关系流程 基础实现 A.提供统一业务Api B.编辑服务提供者Product B.a 添加依赖 B.b 添加Dubbo 配置(基于yaml配置文件) B.c 编写并暴露服务 C.编辑服务消费者 C.a 添加依赖 C.b 添加Dubbo配置 C.c 引用…

使用正则表达式总结

多行匹配 使用Pattern.DOTALL | Pattern.MULTILINE参数 Pattern.CASE_INSENSITIVE&#xff1a;不区分大小写 public static void main(String[] args) {String teststr "AA aa AASSF \n\r */ DDET AA";String regStr "(?AA)\\w\\b";extracted(testst…

网络威胁防御+资产测绘系统-Golang开发

NIPS-Plus 网络威胁防御资产测绘系统-Golang开发 项目地址&#xff1a;https://github.com/jumppppp/NIPS-Plus NIPS-Plus 是一款使用golang语言开发的网络威胁防御系统&#xff08;内置资产测绘系统&#xff09; 网络威胁流量视图网络威胁详细信息浏览列表网络威胁反制探测攻…

C++ std::pair and std::list \ std::array

std::pair<第一个数据类型, 第二个数据类型> 变量名 例如&#xff1a; std::pair<int, string> myPair; myPair.first;拿到第一个int变量 myPair.second拿到第二个string变量 std::pair需要引入库#include "utility" std::make_pair() 功能制作一个…

数控程序传输DNC服务、数控刀补服务(发那科fanuc、西门子、三菱、广数、新代、华中、宝元、马扎克、大畏Okuma)等数据采集服务

行业现状&#xff1a; 最近听到很多做MES、ERP这一行的叫苦&#xff0c; 客户对项目的要求越来越严格&#xff0c;做到数字化工厂都伴随着ERP、MES的项目要求必须一起做下去 然而很对MES、ERP对设备协议不懂&#xff0c;买了协议自己还要开发&#xff0c;考虑线程的问题、断…

syn洪流原理

TCP三次握手 建立连接发送或回应第一次握手客户端发送报文&#xff0c;标志位为SYN&#xff08;seqa&#xff09;第二次握手服务器发送报文&#xff0c;标志位为SYN&#xff0c;ACK&#xff08;seqb,acka1&#xff09;第三次握手客户端回应服务器报文&#xff0c;标志位为ACK&…

Unity 之 Invoke 与InvokeRepeting 函数控制定时调用

文章目录 InvokeInvokeRepeating Invoke 在Unity游戏开发中&#xff0c;Invoke是一种用于延迟调用方法的方法。它允许你在一定的时间之后执行特定的函数或方法&#xff0c;通常用于执行定时任务&#xff0c;例如在一段时间后触发一个事件或在一定间隔内重复执行某个方法。Invo…

图的应用(最小生成树,最短路径,有向无环图)

目录 一.最小生成树 1.生成树 2.无向图的生成树 3.最小生成树算法 二.最短路径 1.单源最短路径---Dijkstra&#xff08;迪杰斯特拉&#xff09;算法 2.所有顶点间的最短路径---Floyd&#xff08;弗洛伊德&#xff09;算法 三.有向无环图的应用 1.AOV网&#xff08;拓扑…