【带头学C++】----- 七、链表 ---- 7.1 链表的概述

news2024/11/28 4:37:28

目录

七、链表

7.1 链表的是什么?

7.2数组和链表的优点和缺点

7.3 链表概述

​编辑

7.4 设计静态链表

7.4.1 定义一个结点(结构体)

7.4.2 使用头结点构建一个单向链表

七、链表

7.1 链表的是什么?

       C++链表是一种数据结构,用于存储和组织元素的集合。它由一个节点的序列组成,每个节点包含数据和一个指向下一个节点的指针。

         链表的节点包含两个重要的部分:数据和指针。数据部分存储实际的元素值,可以是任何数据类型。指针部分指向链表中下一个节点的地址,通过这种方式将节点连接在一起形成链表。

链表通常分为两种类型:单向链表和双向链表。

  • 单向链表(Singly Linked List):每个节点只有一个指向下一个节点的指针。链表的第一个节点称为头节点,最后一个节点称为尾节点,尾节点的指针通常为NULL。

  • 双向链表(Doubly Linked List):每个节点既有一个指向下一个节点的指针,也有一个指向前一个节点的指针。这种结构使得在链表中进行前向和后向遍历变得更加方便和高效。

       链表的优点是可以动态地插入和删除节点,而不需要像数组那样移动大量的元素。然而,链表的缺点是无法通过索引直接访问元素,需要通过遍历链表来寻找指定位置的节点。

       在C++中,可以使用指针来实现链表。常见的链表操作包括在链表的头部插入节点、在链表的尾部插入节点、删除节点、查找节点等。

7.2数组和链表的优点和缺点

静态数组int arr[5];必须事先确定数组元素的个数,过多浪费过小容易溢出,删除插入数据效率低。(需要移动大量的数据)

动态数组:不需要事先知道元素的个数,在使用中动态申请,删除插入数据效率低。(需要移动大量的数据)

(数组优点:遍历元素效率高)

链表:不需要事先知道数据的个数,在使用中动态申请,插入删除不需要移动数据。
(链表缺点:遍历效率低)

7.3 链表概述

       链表是由一个个节点组成,节点没有名字,每个节点从堆区动态申请,节点间物理上是非连续的,但是每个节点通过指针域 保存下一个节点的位置达到逻辑上连续。

不带头结点就是使用一个指针变量来保存第一个结点的地址。带头结点的就是牺牲一个空结点(数据区域不存储数据)来存储第一个结点的地址。 

7.4 设计静态链表

7.4.1 定义一个结点(结构体)

struct stu{
    //数据域
    int num;
    char name[32];
    //指针域
    struct stu *next;
};

7.4.2 使用头结点构建一个单向链表

    struct stu node1 = {101,"Tom",nullptr};
    struct stu node2 = {102,"Jery",nullptr};
    struct stu node3 = {103,"Spike",nullptr};
    struct stu node4 = {104,"Butch",nullptr};
    struct stu node5 = {105,"Galore",nullptr};

    //定义链表头结点
    struct stu *head = &node1;
    node1.next = &node2;
    node2.next = &node3;
    node3.next = &node4;
    node4.next = &node5;
    node5.next = nullptr;

    //遍历链表
    struct stu *pb = head;
    while (pb != nullptr) {
        //访问数据
        cout<<pb->num<<" "<<pb->name<<endl;
        //pb移动到下一个
        pb = pb->next;
    }

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何构建风险矩阵?3大注意事项

风险矩阵法&#xff08;RMA&#xff09;是确定威胁优先级别的最有效工具之一&#xff0c;可以帮助项目团队识别和评估项目中的风险&#xff0c;帮助项目团队对风险进行排序&#xff0c;清晰地展示风险的可能性和严重性&#xff0c;为项目团队制定风险管理策略提供依据。 如果没…

SecureCRT\\FX:打造安全可靠的终端模拟器和FTP客户端

在现代的工作环境中&#xff0c;远程连接和文件传输是不可或缺的任务。而SecureCRT\\FX作为一款安全可靠的终端模拟器和FTP客户端&#xff0c;将帮助您高效管理远程连接和文件传输。 SecureCRT\\FX提供了强大的终端模拟功能&#xff0c;支持SSH、Telnet、RDP等多种协议&#x…

92.Linux的僵死进程以及处理方法

目录 1.什么是僵死进程&#xff1f; 2.代码演示僵死进程 3.解决办法 1.什么是僵死进程&#xff1f; 僵死进程是指一个子进程在父进程之前结束&#xff0c;但父进程没有正确地等待&#xff08;使用 wait 或 waitpid 等系统调用&#xff09;来获取子进程的退出状态。当一个进…

流程图怎么画,用什么软件做?一文弄懂流程图:从流程图的定义、流程图各种图形的含义到流程图制作,一步到位!

流程图&#xff0c;也被称为过程流程图或流程图&#xff0c;是一种表达工作或过程中步骤之间逻辑关系的可视化工具。它主要由不同形状和符号的框以及指向这些框的箭头组成。每个形状或符号都有特定的含义&#xff0c;它们代表了工作流程中的一种特定类型的步骤或动作。 使用流…

视频集中存储/云存储平台EasyCVR级联下级平台的详细步骤

安防视频监控/视频集中存储/云存储/磁盘阵列EasyCVR平台可拓展性强、视频能力灵活、部署轻快&#xff0c;可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等&#xff0c;以及支持厂家私有协议与SDK接入&#xff0c;包括海康Ehome、海大宇等设备的SDK等。平台既具备传统安…

JVM bash:jmap:未找到命令 解决

如果我们在使用JVM的jmap命令时遇到了"bash: jmap: 未找到命令"的错误&#xff0c;这可能是因为jmap命令没有在系统的可执行路径中。 要解决这个问题&#xff0c;可以尝试以下几种方法&#xff1a; 1. 检查Java安装&#xff1a;确保您已正确安装了Java Development …

【Android】导入三方jar包/系统的framework.jar

1.Android.mk导包 1).jar包位置 与res和src同一级的libs中(没有就新建) 2).Android.mk文件 LOCAL_STATIC_ANDROID_LIBRARIES&#xff1a;android静态库&#xff0c;经常用于一些support的导包 LOCAL_JAVA_LIBRARIES&#xff1a;依赖的java库&#xff0c;一般为系统的jar…

[修改Linux下ssh端口号]解决无法修改sshd_config无法修改

前言&#xff1a;写本文的前因是本人的阿里云服务器经常被黑客暴力破解ssh的22端口号。再网络上搜索解决都是说使用root权限进行修改&#xff0c;但本人在root下也无法成功进行修改sshd_config文件。所以在大量搜索下终于找到了解决方案&#xff0c;现在分享出来给有需要的人使…

一个集成了AI和BI报表功能的新一代数据库管理系统神器--Chat2DB

世人皆知Navicate&#xff0c;无人识我Chat2DB &#x1f4d6; 简介 Chat2DB 是一款开源免费的多数据库客户端工具&#xff0c;支持多平台和主流数据库。 集成了AI的能力&#xff0c;能进行自然语言转SQL、SQL解释、SQL优化、SQL转换 ✨ 好处 1、AIGC和数据库客户端的联动&am…

广州华锐互动:办税服务厅税务登记VR仿真体验让税务办理更加灵活高效

在数字化世界的今天&#xff0c;我们正在见证各种业务过程的转型&#xff0c;而税务办理也不例外。最近&#xff0c;一种全新的交互方式正在改变我们处理税务的方式&#xff1a;虚拟现实&#xff08;VR&#xff09;。 首先&#xff0c;用户需要戴上虚拟现实头显&#xff0c;然后…

怎么调监控清晰度,监控画面不清晰怎么修复?

监控画面不清晰怎么修复&#xff0c;通过调整视频的分辨率可以达到使视频更清晰的目的&#xff0c;另外就是如果是室外的环境下&#xff0c;视频的监控镜头会积累灰尘&#xff0c;擦一下镜头有可能会使得拍摄的视频更清晰一些。另外就是可以通过一些软件将视频分辨率提高&#…

互联网医院系统:数字化时代中医疗服务的未来

随着数字化时代的发展&#xff0c;互联网医院系统在医疗服务中的作用日益凸显。本文将讨论互联网医院系统的一些关键技术方面&#xff0c;探讨这些技术如何推动医疗服务进入数字化时代。 1. 数据智能与个性化服务 互联网医院系统依赖于大数据分析和人工智能技术&#xff0c;…

网络运维Day19

文章目录 环境准备数据备份为什么要备份什么是备份备份到哪里什么时候备份如何备份 完整备份物理备份逻辑备份测试恢复所有库 构建MySQL服务xtrabackup完全备份与恢复完全备份完全恢复增量备份增量恢复 总结 环境准备 IP地址采用自动分配&#xff0c;以自己的为准 可以将之前的…

【LeetCode刷题-滑动窗口】--1004.最大连续1的个数III

1004.最大连续1的个数III 方法&#xff1a;滑动窗口 class Solution {public int longestOnes(int[] nums, int k) {int left 0,right 0,zero 0,res 0;while(right < nums.length){if(nums[right]0){zero;}while(zero > k){if(nums[left] 0){zero--;}left;}res Ma…

汽车CAN/ CAN FD数据记录仪在上汽大通诊断测试部门的应用

CAN/CANFD数据诊断记录仪在 规格&#xff1a;数据记录诊断仪 功能&#xff1a;CAN(FD)数据记录 UDS诊断 WIFI收发报文

【搭建统一的IOS开发环境,Ruby链之CocoaPods】

CocoaPods 前提HomebrewHomebrew是什么&#xff1f;Homebrew怎么安装?Homebrew怎么用?有哪些必须知道的命令Homebrew和CocoaPods的关系卸载Homebrew RubyrbenvRubyGems 和 Bundler安装Ruby管理Ruby更新Ruby替换Ruby镜像方式1方式2 CocoaPods安装CocoaPodsCocoaPods使用安装的…

代码随想录算法训练营第22天|235. 二叉搜索树的最近公共祖先 701. 二叉搜索树中的插入操作 450.删除二叉搜索树中的节点

JAVA代码编写 235. 二叉搜索树的最近公共祖先 给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为&#xff1a;“对于有根树 T 的两个结点 p、q&#xff0c;最近公共祖先表示为一个结点 x&#xff0c;满足 x 是 p、q 的祖先且 x 的…

systemverilog:interface中端口方向理解

&#xff08;1&#xff09;从testbench的角度看&#xff0c;tb中信号的输入输出方向与interface中信号输入输出方向一致&#xff1a; &#xff08;2&#xff09;从DUT角度看&#xff0c;DUT中信号输入输出方向与interface中信号输入输出方向相反。简单图示如下&#xff1a; 代…

vue2项目从0搭建(二):配置代理,登录功能和菜单权限

前言: 发送ajax,fetch,websocket请求获取服务端的数据,配置代理是必须的环节 登录功能和菜单权限是后台管理系统中非常经典且十分重要的业务,这里涉及的知识点也是比较多的,坑也多,面试也是很重要的一环。 这里必须得会,没错是必须。 配置服务代理 创建两个node服务 在和…