【王道数据结构笔记】顺序表的静态分配代码分析

在这里插入图片描述

🎈个人主页:豌豆射手^
🎉欢迎 👍点赞✍评论⭐收藏
🤗收录专栏:数据结构
🤝希望本文对您有所裨益,如有不足之处,欢迎在评论区提出指正,让我们共同学习、交流进步!

【王道数据结构笔记】顺序表的静态分配代码分析

  • 引言
    • 一 代码
    • 二 代码分析
    • 三 Sqlist & L的作用
      • 引用(Reference)
      • Sqlist & L 的作用
      • 在代码中的具体意义
      • 总结
  • 总结

引言

一 代码

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#define MaxSize 10
typedef struct {int data[MaxSize];int length;
}Sqlist;
void InitList(Sqlist & L) {for (int i = 0; i < MaxSize; i++)L.data[i] = 0;L.length = 0;
}
int main()
{Sqlist L;InitList(L);for (int i= 0; i < MaxSize; i++)printf("data[%d] = %d\n", i, L.data[i]);return 0;
}

二 代码分析

以下是代码拆分后的每一个步骤及其分析:

步骤1:

#define _CRT_SECURE_NO_WARNINGS

分析:
这行代码定义了一个宏_CRT_SECURE_NO_WARNINGS,它用于在编译时禁用某些安全警告。这通常是为了避免使用如strcpysprintf等可能涉及缓冲区溢出的函数时编译器发出的警告。

步骤2:

#include <stdio.h>

分析:
这行代码包含了标准输入输出库的头文件stdio.h,以便在后续代码中使用如printf等输入输出函数。

步骤3:

#define MaxSize 10

分析:
这行代码定义了一个宏MaxSize,其值为10。这个宏用于表示顺序表的最大容量。

步骤4:

typedef struct {int data[MaxSize];int length;
}Sqlist;

分析:
这行代码定义了一个结构体类型Sqlist,其中包含一个整型数组data用于存储数据,以及一个整型变量length用于记录顺序表的当前长度。

步骤5:

void InitList(Sqlist & L) {for (int i = 0; i < MaxSize; i++)L.data[i] = 0;L.length = 0;
}

分析:
这部分代码定义了一个函数InitList,它接收一个Sqlist类型的引用L作为参数。函数内部使用for循环将顺序表L中的每个元素初始化为0,并将L的长度设置为0,即初始化一个空的顺序表。

步骤6:

int main()
{Sqlist L;

分析:
这是main函数的开始,其中定义了一个Sqlist类型的变量L,用于表示一个顺序表。

步骤7:

InitList(L);

分析:
这行代码调用了InitList函数,并传入L作为参数。这将初始化L,即将其数据数组中的所有元素设置为0,并将长度设置为0。

步骤8:

for (int i= 0; i < MaxSize; i++)printf("data[%d] = %d\n", i, L.data[i]);

分析:
这行代码使用for循环遍历顺序表L的所有元素,并使用printf函数打印每个元素的值。由于L在之前已经被初始化为全0,因此打印的结果将是每个索引位置上的值都是0。

步骤9:

return 0;
}

分析:
这是main函数的结束部分,return 0;表示程序正常结束。

总结:
这段代码定义了一个顺序表的结构体Sqlist,并实现了对其的初始化以及打印操作。在main函数中,创建了一个Sqlist类型的变量L,并调用InitList函数将其初始化。随后,通过循环打印了顺序表L中所有元素的值。

代码运行结果:

data[0] = 0
data[1] = 0
data[2] = 0
data[3] = 0
data[4] = 0
data[5] = 0
data[6] = 0
data[7] = 0
data[8] = 0
data[9] = 0

三 Sqlist & L的作用

在C++中,Sqlist & L 是函数参数的一种声明方式,表示L是对Sqlist类型对象的引用。下面我将详细解释Sqlist & L的作用和它在代码中的具体意义。

引用(Reference)

引用是C++中的一个重要特性,它提供了一种方式,可以使得一个变量成为另一个变量的别名。换句话说,引用和它所引用的对象共享相同的内存地址。这意味着,当你修改引用时,你实际上是在修改它所引用的对象;反之亦然

Sqlist & L 的作用

void InitList(Sqlist & L)函数中,Sqlist & L的作用主要有以下几点:

1.避免拷贝:通过传递引用而不是对象本身,可以避免在函数调用时产生对象的拷贝。对于大型对象(如结构体或类),这可以显著提高性能。

通过传递引用而不是对象本身可以避免在函数调用时产生对象的拷贝,主要基于以下几个原因:

  1. 内存布局:在C++中,对象通常存储在内存中,并且有其固定的内存地址。当你传递对象本身给函数时,实际上是将对象的完整内容(即它的所有成员变量和数据)复制一份到新的内存地址,然后将这个复制的地址传递给函数。这个过程称为按值传递(pass-by-value)。如果对象非常大,那么这种复制操作可能会消耗大量的内存和时间。
  1. 引用的本质:引用是对象的别名,它并不占用额外的内存空间来存储对象的内容,而是直接指向对象在内存中的地址。因此,当你传递引用给函数时,实际上只是传递了对象的内存地址,而不是对象本身。这样,函数内部就可以通过这个地址直接访问和操作原始对象,而不需要复制对象。
  1. 直接修改原对象:由于引用和原对象共享内存,所以通过引用可以直接修改原对象的状态。在InitList函数中,我们修改了L.data数组和L.length成员,这些修改将直接反映到传入的原对象上。

  2. 增加代码清晰度:通过引用传递对象,可以清晰地表明函数的意图是修改传入的对象,而不是创建一个新的副本

在代码中的具体意义

main函数中,我们定义了一个Sqlist类型的变量L。当我们调用InitList(L);时,我们实际上是将L的引用传递给了InitList函数。这意味着在InitList函数内部对L的任何修改都会直接反映到main函数中定义的L对象上

因此,当InitList函数执行完毕后,main函数中的L对象已经被初始化了:data数组的所有元素都被设置为0length成员被设置为0。

这些修改都是通过引用传递实现的,没有涉及到对象的拷贝。

总结

Sqlist & L在C++中表示对Sqlist类型对象的引用。通过引用传递对象可以避免不必要的拷贝,并允许直接修改原对象的状态。在InitList函数中,我们通过引用传递Sqlist对象来初始化它,确保修改能够直接反映到传入的原对象上。

总结

这篇文章到这里就结束了

谢谢大家的阅读!

如果觉得这篇博客对你有用的话,别忘记三连哦。

我是豌豆射手^,让我们我们下次再见

在这里插入图片描述

在这里插入图片描述

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

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

相关文章

2024-04-08

作业要求&#xff1a; 1> 思维导图 2>使用手动连接&#xff0c;将登录框中的取消按钮使用qt4版本的连接到自定义的槽函数中&#xff0c;在自定义的槽函数中调用关闭函数 将登录按钮使用qt4版本的连接到自定义的槽函数中&#xff0c;在槽函数中判断ui界面上输入的账号是否…

攻防世界05view_source

鼠标右键无法查看源代码&#xff0c;但是可以直接F12进行查看 但是没有办法复制&#xff0c;可以在地址前面加上view-source 这时候就可以复制了 知识点1&#xff1a;view-source协议-查看源码 view-source是一种协议&#xff0c;早期基本上每个浏览器都支持这个协议。后来Mi…

C语言基础(四)

C语言基础 一维数组数组初始化全部初始化部分初始化数组的默认值冒泡排序 字符数组 二维数组初始化行数是否可省略列数是否可以省略部分初始化 访问二维字符数组 函数分类库函数自定义函数调用自定义函数函数声明 一维数组 概念&#xff1a;一组数据类型相同的元素的集合 <…

无人机巡检技术革命性变革光伏电站运维管理

在中国广袤的大地上&#xff0c;光伏电站如雨后春笋般崛起&#xff0c;晶体硅组件板在阳光下熠熠生辉&#xff0c;为人们带来了源源不断的绿色能源。然而&#xff0c;随着光伏产业的迅猛发展&#xff0c;电站运维管理面临着前所未有的挑战。而无人机巡检技术的引入&#xff0c;…

【Unity+Python】如何通过Socket进行通信

1、Unity端创建名为UnityClient.cs脚本代码(客户端)&#xff1a; 注意&#xff1a;unity的规则中类&#xff0c;名和脚本文件名需要相同。 using System.Net.Sockets; using System.Text; using UnityEngine;public class UnityClient : MonoBehaviour {TcpClient client;Netw…

TypeScript 忽略红色波浪线

&#x1f468;&#x1f3fb;‍&#x1f4bb; 热爱摄影的程序员 &#x1f468;&#x1f3fb;‍&#x1f3a8; 喜欢编码的设计师 &#x1f9d5;&#x1f3fb; 擅长设计的剪辑师 &#x1f9d1;&#x1f3fb;‍&#x1f3eb; 一位高冷无情的全栈工程师 欢迎分享 / 收藏 / 赞 / 在看…

CNN-Transformer时间序列预测

部分代码&#xff1a; # CNN-Transformer class CNNTransformerEncoder(nn.Module):def __init__(self, input_features, transformer_encoder_heads,embedding_features, cnn_kernel_size, dim_feedforward_enc, n_encoder_layer):super(CNNTransformerEncoder, self).__init…

数模 初见数建

文章目录 初见数学建模1.1 数学建模是什么1.2 数学建模的概述1.3 如何学习数学建模---分模块化1.4 数学建模前提了解1.5 数学建模的六个步骤1.6 如何备战建模比赛1.7 数学建模赛题类型1.8 数学建模算法体系概述 初见数学建模 1.1 数学建模是什么 1.原型与模型 原型&#xff…

ssm048电子竞技管理平台的设计与实现+jsp

电子竞技管理平台设计与实现 摘 要 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;归纳&#xff0c;集中处理数据信息的管理方式。本电子竞技管理平台就是在这样的大环境下诞生&#xff0c;其可以帮助管理者在短…

Docker之自定义镜像上传至阿里云

一、Alpine介绍 Alpine Linux是一个轻量级的Linux发行版&#xff0c;专注于安全、简单和高效。它采用了一个小巧的内核和基于musl libc的C库&#xff0c;使得它具有出色的性能和资源利用率。 Alpine Linux的主要特点包括&#xff1a; 小巧轻量&#xff1a;Alpine Linux的安装…

【新版】系统架构设计师 - 知识点 - 面向对象开发方法

个人总结&#xff0c;仅供参考&#xff0c;欢迎加好友一起讨论 文章目录 架构 - 知识点 - 面向对象开发方法面向对象开发方法面向对象的分析需求模型分析模型 面向对象的设计 用例模型关系、UML事务关系、类的关系 架构 - 知识点 - 面向对象开发方法 面向对象开发方法 分析阶段…

<-泛型->

1.泛型的概念 所谓泛型&#xff0c;就是允许在定义类, 接口 时通过一个"标识"表示类中某个属性的类型或者某个方法的返回值或形参类型.这个类型参数将在使用时确定. 2.举例 (1). 集合类在设计阶段/声明阶段不能确定这个容器到底存的是什么对象&#xff0c;所以在JDK…

微信小程序制作圆形进度条

微信小程序制作圆形进度条 1. 建立文件夹 选择一个目录建立一个文件夹&#xff0c;比如 mycircle 吧&#xff0c;另外把对应 page 的相关文件都建立出来&#xff0c;包括 js&#xff0c;json&#xff0c;wxml 和 wxcc。 2. 开启元件属性 在 mycircle.json中开启 component 属…

51蓝桥杯之DS18B20

DS18B20 基础知识 代码流程实现 将官方提供例程文件添加到工程中 添加onewire.c文件到keil4里面 一些代码补充知识 代码 #include "reg52.h" #include "onewire.h" #include "absacc.h" unsigned char num[10]{0xc0,0xf9,0xa4,0xb0,0x99,…

随机链表的复制 - LeetCode 热题 32

大家好&#xff01;我是曾续缘&#x1f4a4; 今天是《LeetCode 热题 100》系列 发车第 32 天 链表第 11 题 ❤️点赞 &#x1f44d; 收藏 ⭐再看&#xff0c;养成习惯 随机链表的复制 给你一个长度为 n 的链表&#xff0c;每个节点包含一个额外增加的随机指针 random &#xff…

【leetcode面试经典150题】28.盛最多水的容器(C++)

【leetcode面试经典150题】专栏系列将为准备暑期实习生以及秋招的同学们提高在面试时的经典面试算法题的思路和想法。本专栏将以一题多解和精简算法思路为主&#xff0c;题解使用C语言。&#xff08;若有使用其他语言的同学也可了解题解思路&#xff0c;本质上语法内容一致&…

漫步密度森林:借助HDBSCAN实现高效数据聚类

文章来源&#xff1a;navigating-the-density-forest-harnessing-hdbscan-for-advanced-data-clustering 2024 年 4 月 9 日 介绍 在数据科学中&#xff0c;聚类算法是揭示数据集内在结构的重要工具。在这些工具中&#xff0c;基于分层密度的噪声应用空间聚类 (HDBSCAN) 作为…

【C++学习】C++11新特性(第一节)

文章目录 ♫一.文章前言♫二.C11新特性♫一.统一的列表初始化♫二.std::initializer_list♫三.声明♫四.decltype关键字♫五.nullptr♫六.新增加容器---静态数组array、forward_list以及unordered系列♫6.1unordered_map与unoredered_set♫6.2array♫6.3 forward_list&#xff…

【Altium Designer 20 笔记】隐藏PCB上的信号线(连接线)

使用网络类隐藏特定类型的信号线 如果你想要隐藏特定类型的信号线&#xff08;例如电源类&#xff09;&#xff0c;你可以首先创建一个网络类。使用快捷键DC调出对象类浏览器&#xff0c;在Net Classes中右击添加类&#xff0c;并重命名&#xff08;例如为“Power”&#xff0…

centos编译安装nginx1.24

nginx编译1.24&#xff0c;先下载安装包 机器通外网的话配置nginx的yum源直接yum安装 vim /etc/yum.repos.d/nginx.repo [nginx-stable] namenginx stable repo baseurlhttp://nginx.org/packages/centos/$releasever/$basearch/ gpgcheck1 enabled1 gpgkeyhttps://nginx.org…