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.hqwc.cn/news/107093.html

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

相关文章

PyCharm克隆github上开源的项目

PyCharm怎么clone github上开源的项目 一、先要确保PyCharm正确的配置了Git 如果你已经在PyCharm中配置好了Git&#xff0c;可以跳过此步骤&#xff0c;直接看下一步。 那么怎么在PyCharm中配置Git呢&#xff1f; 百度搜索Git安装包&#xff0c;安装过程不再多说&#xff0…

数据结构与算法基础-学习-34-基数排序(桶排序)

目录 一、基本思想 二、算法思路 1、个位排序 &#xff08;1&#xff09;分配 &#xff08;2&#xff09;收集 2、十分位排序 &#xff08;1&#xff09;分配 &#xff08;2&#xff09;收集 三、源码分享 1、InitMyBucket 2、DestroyMyBucket 3、ClearMyBucket 4、…

JMeter接口测试

0.前言, 我决定我的代码必须要提升性能了,而不是写不写得出来的问题了, however,怎么知道我的代码是不是很烂和健壮性,需要专业的测试工具来测试出来,如高并发QPS是什么?,高频率是什么? 怎样自动化测试解放双手 1.jmeter是apache使用java的测试工具,模拟巨大的负载,官网地址…

C++ 特性模版

目录 1. 非类型模板参数 2. 模板的特化 2.1 概念 2.2 函数模板特化 2.3 类模板特化 2.3.1 全特化 2.3.2 偏特化 2.3.3 类模板特化应用示例 3 模板分离编译 3.1 什么是分离编译 3.2 模板的分离编译 3.3 解决方法 4. 模板总结 1. 非类型模板参数 模板参数分类类型形…

数据库数据恢复-Oracle数据库truncate的数据恢复案例

Oracle数据库故障&分析&#xff1a; 北京某单位Oracle 11g R2数据库误执行truncate table CM_CHECK_ITEM_HIS&#xff0c;表数据丢失&#xff0c;查询该表时报错。数据库备份无法使用&#xff0c;表数据无法查询。 Oracle数据库Truncate数据的机理&#xff1a;执行Trunca…

如何初始化静态成员在类中

c - How do I initialize a const data member? - Stack Overflow

【GO语言基础】基本数据类型

系列文章目录 【Go语言学习】ide安装与配置 【GO语言基础】前言 【GO语言基础】变量常量 【GO语言基础】数据类型 文章目录 系列文章目录数据类型数值型&#xff1a;整数类型&#xff1a;浮点数类型&#xff1a; 字符型-布尔型-字符串零值转义字符 常用类型转换运算符总结 数据…

2023-9-11 台阶-Nim游戏

题目链接&#xff1a;台阶-Nim游戏 #include <iostream> #include <algorithm>using namespace std;int main() {int n;cin >> n;int res 0;for(int i 1;i < n; i){int x;cin >> x;if(i % 2) res ^ x; }if(res) cout << "Yes" &l…

Ask Milvus Anything!聊聊被社区反复@的那些事儿 Ⅰ

作为用户备受期待的重大版本&#xff0c;Milvus 2.3 不仅新上线了实用的新功能&#xff0c;还对已有功能的进行更新和优化。因此&#xff0c;新版本一经发布&#xff0c;便受到了社区用户的热切关注&#xff0c;期间我们也陆陆续续收到了不少用户的使用体验及问题反馈。 为了给…

多元共进|科技促进艺术发展,助力文化传承

科技发展助力文化和艺术的传播 融合传统与创新&#xff0c;碰撞独特魅力 一起来了解 2023 Google 开发者大会上 谷歌如何依托科技创新 推动艺术与文化连接 传承和弘扬传统文化 自 2011 年成立以来&#xff0c;谷歌艺术与文化致力于提供体验艺术和文化的新方式&#xff0c;…

HarmonyOS/OpenHarmony应用开发-DevEco Studio 中文插件的使用

DevEco Studio按照后&#xff0c;各项菜单栏默认是英文的&#xff0c;很多初学者&#xff0c;把菜单栏调整为中文的后&#xff0c;更容易上手与操作。具体步骤如下&#xff1a; 一、打开文件 二、选择设置 三、选择插件 四、选择中文 五、询问是否马上重启&#xff0c;本文选择…

2022年全国研究生数学建模竞赛华为杯E题草原放牧策略研究求解全过程文档及程序

2022年全国研究生数学建模竞赛华为杯 E题 草原放牧策略研究 原题再现&#xff1a; 一、背景介绍   草原作为世界上分布最广的重要的陆地植被类型之一&#xff0c;分布面积广泛。中国的草原面积为3.55亿公顷&#xff0c;是世界草原总面积的6%~8%&#xff0c;居世界第二。此外…