【数据结构 ---基于C语言预备知识】

news2024/10/5 15:25:11

数据结构 ---基于C语言预备知识

  • 一、对数据结构这门课的基础认识
    • 1.1 数据结构的定义:
    • 1.2 衡量算法的标准:主要的是1,2
    • 1.3 数据结构的特点和地位:
  • 二、预备知识:
    • 2.1 内存概念:
    • 2.2 预备知识指针(复习):
      • 地址的定义:
      • 指针的定义:
      • 指针变量:
      • (1)基本类型的指针
      • (2) 指针和数组的关系:
      • 指针运算:指针加减整数
      • 指针变量的大小:是确定的,和指向的变量类型无关
    • 2.3 结构体:
      • 结构体的作用:
      • 结构体是什么:
      • 使用结构体(结构体变量的访问):
      • 结构体的注意事项:
    • 三、动态内存的分配和释放:

一、对数据结构这门课的基础认识

1.1 数据结构的定义:

我们怎样将现实中的各种数据以特定的数据类型特定的存储结构保存到主存储器(内存)当中去。-------数据结构

在此存储基础上为实现某个功能(比如查找某个元素,删除某个元素,以及对所有元素进行排序)而执行的相应操作,这个相应的操作也叫做算法-----算法

因此说,数据结构与算法不分家,

数据结构指数据的存储
算法指的是对存储数据的操作(解题的方法和步骤,依附于存储结构)

数据的存储:数据结构研究现实中大量的问题数据保存到内存当中去,个体如何存储,个体与个体之间特定的关系如何存储

不同的算法要完成同一种存储的操作是完全不一样的:数组,链表,栈,队列

1.2 衡量算法的标准:主要的是1,2

1 .时间复杂度(程序大概需要执行的次数,估算,不是执行的时间)

​ 如何计算时间复杂度:运行一次的时间*要执行的次数

另外算法时间复杂度也和机器有关

2 .空间复杂度:(算法执行过程中大概所占用的最大内存)

3 难易程度

4.健壮性

1.3 数据结构的特点和地位:

很重要很重要,是软件中最核心的课程,是基本功,是内功

学完之后实际的干不出来什么,但是他是内功,促进对其他课程的学习以及对于编程的理解

栈内存和堆内存:内存方式的算法不同

程序=数据的存储+数据的操作+计算机语言(数据结构+算法+编程语言)

二、预备知识:

最好的数据结构:伪代码用一定的语言来实现(有难度)

一定是需要指针的(数据结构的核心是链表),因此基于java的数据结构是胡扯

C语言中的指针是基础

2.1 内存概念:

(1)内存是用来存储数据的设备,存储速度介于寄存器和硬盘之间

(2)内存是CPU唯一可以访问的大容量存储设备,多有硬盘中的程序和数据的运营都需要先调入内存之后才能被CPU执行

(3)内存的分配是软件开发的核心问题

(4)内存是多字节组成的线性一位空间

(5)内存的基本划分单位:字节,每个字节有8位

(6)字节和编号一一对应,每个字节对应一个一个编号,这个编号也叫地址

(7)一个系统所能管理的内存空间取决于编号的二进制位数

2.2 预备知识指针(复习):

指针的重要性:C语言的灵魂

地址的定义:

内存单元的编号(从0开始的非负整数)

内存可以由cpu直接访问,CPU和内存之间有三根线:地址线(确定Cpu处理的内存对象),控制线(表示只读?只写?可读可写?),数据线(数据传输)

指针的定义:

指针就是地址,地址就是指针

指针的本质是一个操作受限的非负整数

指针变量:

存放内存单元地址(内存单元编号)的变量(也是变量)

指针变量如果没有及时初始化里面存放的是一个垃圾数字,指向不确定的单元。

指针变量的初始化:
在这里插入图片描述

(1)基本类型的指针

int* p:

p是指针变量的名字

int*表示只能存放整型变量的地址(表示指针变量的类型)
在这里插入图片描述

函数调用中:传值调用(不可修改),传值调用(可以修改)

(2) 指针和数组的关系:

在这里插入图片描述

一维数组名是个指针常量(记住就行),存放的是一维数组在首元素的地址(指向a[0])

arr[ i ]等价于( arr + i )*

指针运算:指针加减整数

指针变量的大小:是确定的,和指向的变量类型无关

在这里插入图片描述

2.3 结构体:

结构体的作用:

为了完整的表示复杂对象,普通的基本类型变量无法满足要求

结构体是什么:

自定义的一种数据类型,是数据类型而不是变量,是一种模型,{ }上面的表示的是数据类型的名称

使用结构体(结构体变量的访问):

(1)对结构体变量初始化后,通过‘ . ’结构体访问标识符的方式对结构体变量进行访问

(2)->的方式(更常用)

定义一个结构体类型的指针变量并将某个结构体变量的地址赋予这个指针

再使用->就可以对结构体变量中的成员变量进行访问

结构体的注意事项:

1 结构体变量不能相加减,但是可以相互赋值

2 结构体变量和结构体指针变量作为函数传参的问题

三、动态内存的分配和释放:

分配:请求使用内存

释放:使用完操作系统回收内存的使用权限

静态数组:没有使用malloc函数,通过下标访问的数组

动态数组:使用了malloc函数

在这里插入图片描述

优点:(1)更加灵活,可以在程序执行过程中对数组内存空间进行分配和释放

int* pArr = ( int* ) malloc ( sizeof ( int ) * len );

malloc库函数里面整体是一个形参,表示的是请求申请的字节总数,函数的返回值是第一个字节的地址(没有实际含义的地址,也叫干地址)。

( int* )是强制类型转换,指出应该指向的数据的地址类型

用第一个字节的表示第一个元素(前四个字节)的地址

pArr可以当作动态数组的数组名:pArr是动态数组首元素的地址

(2)在程序运行的过程中,需要对动态数组内存空间进行手动释放。

在这里插入图片描述

free(动态数组名);

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

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

相关文章

每日学术速递4.23

CV - 计算机视觉 | ML - 机器学习 | RL - 强化学习 | NLP 自然语言处理 Subjects: cs.CV 1.LiDAR-NeRF: Novel LiDAR View Synthesis via Neural Radiance Fields 标题:LiDAR-NeRF:通过神经辐射场的新型 LiDAR 视图合成 作者:Tang Tao, …

pytest 学习三(前置后置操作)

pytest测试框架_pytest框架-CSDN博客 一、常用的操作 一、setup/teardown 每个用例之前、之后执行 二、setup_class/teardown_class 在每个类之前、之后执行一次 二、pytest.fixture 设置前置后置操作范围 pytest.fixture(scope"",params,autouse,ids,name) 其中 sc…

TVM- End-to-End Optimization Stack for Deep Learning

TVM- End-to-End Optimization Stack for Deep Learning 引言 TensorFlow、MXNet、Caffe 和 PyTorch 等可扩展框架推动了深度学习当前的普及和实用性。然而,这些框架针对范围较窄的服务器级 GPU 进行了优化,将工作负载部署到其他平台(例如手…

SpringBoot中@EnableAsync和@Async注解的使用

目录 1.EnableAsync 注解1.1 配置类使用示例1.2 复制请求上下文 2.用法1:Async 注解2.1 测试Controller2.2 测试Service2.3 测试ServiceImpl2.4.测试 4.用法2:直接使用 taskExecutor 做异步4.1 重新实现:测试ServiceImpl4.2 测试 5.Async异步…

保护模式段描述符

目前为止,内存还是分段模式,所以想要保护内存,就需要保存段。由于CPU的扩展导致了32位的段基地址和段内偏移,所以16位的段寄存器就无法放下这些信息。现在就需要把这些信息放到内存中,这些信息被封装成特定的段描述符。…

Vue进阶-Vue cli项目搭建、项目基本操作、axios的使用、路由、Vuex

Vue进阶 Vue cli 一、Vue cli 概述 CLI 全称是 Commond Line Interface,翻译为命令行界面,俗称脚手架。VueCLI是一个官方发布vue.js项目脚手架。用VueCLI 可快速搭建Vue开发环境以及对应webpack配置。 二、环境搭建 1、下载 node.js 下载地址&…

4 redis高可用

所谓的高可用,也叫HA(High Availability),是分布式系统架构设计中必须考虑的因素之一,它通常是指,通过设计减少系统不能提供服务的时间。如果在实际生产中,如果redis只部署一个节点,…

Compiler- 自增运算

我们来看一下C语言中的前自增(i)和后自增(i) 这个经典案例。大家在学习C的时候肯定学过前自增是先自增,然后将结果用于计算;后自增是先参与计算,再增加。 好,看一下这段代码的结果: #include …

PE文件反编译为python脚本流程

1、查壳 DetectltEasy、PeiD查壳 2、脱壳 常见打包工具PyInstaller,脱壳方法 (1)用pyinstxtractor.py脱壳,用”python pyinstxtractor.py 1.exe“命令,生成“.exe文件名_extracted” (2)用…

Python+Qt人脸识别门禁管理系统

程序示例精选 PythonQt人脸识别门禁管理系统 如需安装运行环境或远程调试&#xff0c;见文章底部个人QQ名片&#xff0c;由专业技术人员远程协助&#xff01; 前言 这篇博客针对<<PythonQt人脸识别门禁管理系统>>编写代码&#xff0c;代码整洁&#xff0c;规则&am…

1 ROS2介绍与安装

1 ROS2介绍与安装 1.1 Ubuntu配置与ROS2安装1.1.1 Ubuntu22.04安装1.1.2 下载安装ROS21.1.3 配置ROS2环境并测试 1.2 使用VSCode搭建ROS2开发环境1.2.1 安装并配置VSCode1.2.2 创建ROS2工程的方法1.2.3 使用VSCode创建ROS2的C/C项目1.2.4 使用VSCode创建ROS2的Python项目 1.3 R…

Samba配置回收站功能

部门确实需要给Samba配置回收站&#xff0c;查阅了下回收站的资料&#xff0c;配置也挺简单的。 配置说明&#xff1a; 在Samba配置回收站功能中各参数作用如下。 (1) vfs object recycle&#xff1a;载入Samba用于回收站功能的模块recycle.so。 (2) recycle:repository /Pr…

企业如何保护外发文件的数据安全?

随着数字化转变&#xff0c;企业的业务文件大多通过电子形式在内外部流转。这增加了外发文件数据泄露或被篡改的风险&#xff0c;如何保护外发文件安全已成为企业不容忽视的课题。 企业外发文件&#xff0c;特别是电子文件&#xff0c;存在一定的数据安全风险&#xff1a; 文件…

第十二章 外观模式

文章目录 前言一、外观模式基本介绍完整代码DVD类爆米花类投影仪类屏幕类立体声类灯光类家庭影院类进行聚合Client测试类 二、 外观模式在MyBatis框架应用的源码分析三、外观模式的注意事项和细节 前言 一、外观模式基本介绍 完整代码 DVD类 package tanchishell.SJMS.faca…

Layui 2.8.0 正式发布,朴实归来

Layui 是一套开源的 Web UI 组件库&#xff0c;采用自身轻量级模块化规范&#xff0c;遵循原生态的 HTML/CSS/JavaScript 开发模式&#xff0c;极易上手&#xff0c;拿来即用。其风格简约轻盈&#xff0c;而内在雅致丰盈&#xff0c;甚至包括文档在内的每一处细节都经过精心雕琢…

On the Efficacy of Knowledge Distillation 解析

paper&#xff1a;On the Efficacy of Knowledge Distillation 本文的题目是《论知识蒸馏的有效性》&#xff0c;主要是对教师模型并不是越大越好这一现象进行研究&#xff0c;并提出了缓解方法&#xff1a;early stop。 Bigger models are not better teachers 知识蒸馏背…

S32k3系列开发学习(FlexCAN)

前言 由于之前没有接触过CAN总线模块&#xff0c;对这一块的知识仍比较陌生&#xff0c;于是乎想简单梳理一下CAN总线的工作流程&#xff0c;加深理解。 一、CAN是什么&#xff1f; 参考&#xff1a;https://zhuanlan.zhihu.com/p/346696648 二、CAN框架 各模块功能如下&am…

NLP基础:标注器Label Studio的入门使用

目录 一、环境准备 二、操作 文章来源&#xff1a; 简介&#xff1a; Label Studio是一个开源的数据标注工具&#xff0c;它可以用于各种机器学习和深度学习项目。它的主要目的是帮助数据科学家和机器学习工程师快速、高效地标注数据&#xff0c;以构建和训练准确的机器学…

Linux入门---开发的Linux命令手册

Linux 基础知识 基础 启动过程&#xff1a; 内核的引导。运行 init。系统初始化。建立终端 。用户登录系统。 命令介绍 磁盘 #文件#a&#xff1a;相当於 -pdr 的意思&#xff0c;至於 pdr 请参考下列说明&#xff1b;(常用)&#xff1b;f&#xff1a;为强制(force)进行&…

Ubuntu20.04使用多卡训练HyperNetwork模型和LoRA模型全流程及疑难问题解决方案

目录 一. LoRA模型多卡训练1.1 安装xformer等库1.2 设置路径1.3 多卡训练 二. LoRA模型多卡训练疑难报错解决方案多卡训练报错 软硬件配置&#xff1a; CPU: AMD 5800 8core 16Thread GPU: NVIDIA RTX 3090 *1 NVIDIA TITAN RTX *1 OS: Ubuntu20.04 一. LoRA模型多卡训练 1.1 …