嵌入式知识体系分析+数据结构概念+时间复杂度计算规则+顺序表的原理与实现

ops/2025/1/22 6:49:31/

  1. 数据结构概述

  • 基本概念

数据结构指的是计算机存储数据和组织数据的方式,存储数据和组织数据的目的是为了后期对数据的再次利用,所以存储的数据一般是具有一个或者多个特定关系的集合,利用不同的数据结构可以提高数据的访问效率。

思考:为什么大家来到新教室选好座位之后需要填写座位表?? 答案:方便对数据管理

数据指的是可以被输入到计算机并且可以被计算机处理的符号的总称,数据的英文是Data。

数据是有单位的,数据的基本单位是数据元素(Data Element),在计算机中数据元素是作为整体来处理的,比如学生的信息。数据元素是由多个数据项组成的,所以数据项也被称为数据的最小单位,比如学生信息中的学号、姓名、年龄,数据项属于数据元素不可分割的一部分。

举例:比如国家是数据元素,则每个国家的城市就是数据项,数据项是数据不可分割的部分。

注意:世界上不止有一个国家,如果每个国家都是数据元素的话,则多个数据元素的集合就被称为数据对象(Data Object)。

数据结构就是描述多个数据之间的逻辑结构和物理结构。逻辑结构指的是数据元素之间的逻辑关系,物理结构指的是计算机中存储数据的方式,所以物理结构也被称为存储结构。

注意:数据元素的逻辑关系和物理关系没有必然的联系,数据元素可能同时存储逻辑关系和物理关系,数据元素之间也可能只存在一种关系,或者数据元素之间一种关系都没有。

  • 逻辑关系

对于数据结构的逻辑关系,可以分为四种:集合(无关系)、线性结构(一对一)、树状结构(一对多)、图状结构(多对多)。

  • 物理关系

数据的物理关系可以分为两种:一种是顺序结构(连续存储),另一种是离散结构(离散存储),一般把顺序结构也称为顺序存储,一般把离散结构也称为链式存储,两种区别如下图

练习:请问该笔试题的结果是什么?请给出简单的推理过程,请独立完成该笔试题的分析。

广义上讲算法是研究数据之间的逻辑关系,然后选择某种方案来存储数据,并在此基础上对数据进行处理,其实更加直白的说:算法指的是计算或者解决问题的步骤。

请问:如果把下面的一个随机数列中的数值按照从小到大顺序进行排列??具体步骤是什么??

  1. 有穷性:指的是程序执行必须在有限次数内完成,而每一次必须在有限时间内执行完成。
  1. 确定性:执行的每一条语句都必须有准确的解释,不能出现二义性,意味着相同的输入 就会相同的输出。
  1. 可行性:程序中每一条复杂语句都可以分解为基本指令,并且每条基本指令都必须在有 限时间完成。
  1. 输入项:指的是算法可以有一个或者多个参数作为初始条件,然后对程序进行有效执行。
  1. 输出项:指的是算法经过运算之后可以有一个或者多个输出,所以一个有意义的算法是 应该有输出结果的。

总结:一个程序的执行是需要用户选择合适的算法数据结构的,程序 = 数据结构+算法

思考:到底什么样的数据结构算法是合适的?怎么去评定选择的数据结构算法是否合适?

回答;对于数据结构的选择和算法的选择并不是唯一的,但是选择要是合适的,衡量数据结构算法的选择是否合适,取决于算法实现的运行时间和内存空间。一般是通过两个专业性名称,分别是“时间复杂度”和“空间复杂度”。

  1. 时间复杂度

时间复杂度不是指算法完成1次花费的时间,因为取决于硬件的性能,比如8位单片机的主频一般是12MHZ,而32位的MCU的主频有72MHZ、180MHZ,而64位的CPU的主频高达2.9GHZ。

时间复杂度指的是算法程序的基本执行语句的执行次数,也可以称为语句频度,一个程序的语句执行次数越多,则时间复杂度越大,则说明算法不合适。时间复杂度一般采用数学符号大O()表示,一般时间复杂度的计算中都会出现n,n表示规模,对于时间复杂度是表示算法的趋势。

一般会把算法程序的语句的执行次数用T()表示,但是对于函数T()可能是一个多项式,而时间复杂度就是找出函数T()影响最大的项,所以时间复杂度是执行语句的估算值,使用数学符号大O()表示。O其实是order的缩写。大O的括号中写的值就是影响程序执行语句最大的那个项。

计算技巧:如果算法中没有使用n来表示规模,也就是如果计算出的多项式是一个常数项,则时间复杂度恒为 O(1)。

  • 空间复杂度

空间复杂度指的是程序运行期间所需要的内存空间,空间复杂度越大,则说明程序运行期间需要的内存越多,则说明算法不合适。

注意:程序中的时间复杂度和空间复杂度是可以互相转换的,一般情况下是相互制约的,意味着“鱼和熊掌不可兼得”,所以用户根据实际情况去选择时间还是空间,意味着要选择合适的算法来保持平衡。

一个好的算法通常是执行时间短,占用空间少,并且可读性好、容易维护,易于移植到其他平台。

练习:请问该笔试题的结果是什么?请给出简单的推理过程,请独立完成该笔试题的分析。

  • 结构类型

大家在学习C语言的时候接触的数组在数据结构中是属于线性表的一种,线性表是由一组具有n个相同类型的数据元素组成的。

线性表中的任何一个数据元素有且只有一个直接前驱,以及有且只有一个直接后继,另外首元素是没有前驱的,尾元素是没有后继的。

某个元素的左侧相邻元素被称为“直接前驱”,元素左侧所有的数据元素被称为“前驱元素”

某个元素的右侧相邻元素被称为“直接后继”,元素右侧所有的数据元素被称为“后继元素”

满足这种数学关系的一组元素,逻辑关系就是线性结构,并且逻辑关系是一对一的,比如一个教室学生的学号、一个排队的队伍、一摞堆好的盘子.....都属于线性结构,当然线性结构和存储方式是无关的,简单理解:只有逻辑关系是一对一的,就是线性结构。

所以,根据数据的存储方式可以把线性表分为两种:顺序存储的线性表,链式存储的线性表。

顺序表的原理与应用

  • 基本概念

顺序表指的是使用一组内存地址连续的内存单元来依次存储线性表中的数据元素,使用这种存储结构的线性表就被称为顺序表。

简单理解:数据存储在一块连续的内存中,在C语言中可以具名的数组,也可以使用匿名的数组(堆内存)。

顺序表的特点:数据元素之间的逻辑关系是相邻的,并且内存地址也是相邻的,所以只要知道存储线性表的第一个数据元素的内存地址,就可以对线性表中的任意一个元素进行随机访问。通常用户使用动态分配的数组来实现顺序表,也就是使用堆内存实现。

随机访问指的是在同等时间内具有访问任意元素的能力,和随机访问相对立的就是顺序访问,顺序访问花费的时间要高于随机访问,比如卷轴(顺序)和书籍(随机)、磁带(顺序)和唱片(随机)。

练习:请问该笔试题的结果是什么?请给出简单的推理过程,请独立完成该笔试题的分析。

练习:请问该笔试题的结果是什么?请给出简单的推理过程,请独立完成该笔试题的分析。

练习:请问该笔试题的结果是什么?请给出简单的推理过程,请独立完成该笔试题的分析。

  • 程序设计

思考:既然数组可以作为线性表来使用,请问如何对数组中的元素进行增加和删除以及访问?

回答:如果打算使用数组实现线性表的特性,需要知道三个条件:数组首元素地址、数组元素的容量、数组有效的最后一个元素的下标。

  1. 创建顺序表

  1. 插入新元素

  1. 删除元素

  1. 判断顺序表是否已满

  1. 判断顺序表是否为空

  1. 遍历顺序表

  • 结果验证

练习:请问该笔试题的结果是什么?请给出简单的推理过程,请独立完成该笔试题的分析。

练习:请问该笔试题的结果是什么?请给出简单的推理过程,请独立完成该笔试题的分析。

int DeleteData(&L,int p,&e){if(p > length -1 )return 0;e = L[p];for(int i = p; i< length -1;i++){L[i] = L[i+1];}length --;return 1;}


http://www.ppmy.cn/ops/152124.html

相关文章

26岁备考PMP,经验分享

26岁普通女孩因考了个PMP.... 突然好喜欢现在的自己&#xff5e; 现在的生活尽管没有很富有&#xff0c;但我现在工作真的很满意&#xff0c;周末双休薪资也不错&#xff0c;没有依靠任何人&#xff0c;全都是我自己努力得来的。 想想以前的我因为学历自卑&#xff0c;到处讨好…

第四届机器学习、云计算与智能挖掘国际会议

一、会议信息 会议名称&#xff1a;第四届机器学习、云计算与智能挖掘国际会议&#xff08;MLCCIM 2025&#xff09;​​​​​​​ 会议地点&#xff1a;中国漠河 会议时间&#xff1a;2025年7月21-25日 支持单位&#xff1a;佛山市人工智能学会、佛山大学 二、大会主席 …

go语言zero框架通过chromedp实现网页在线截图的设计与功能实现

在 GoZero 框架中实现网页在线截图的功能&#xff0c;可以通过集成 chromedp 库来控制 Chrome 浏览器进行截图。chromedp 是一个基于 Chrome DevTools 协议的 Go 包&#xff0c;可以用来在 Go 程序中模拟浏览器操作&#xff0c;如页面截图、DOM 操作、表单提交等。 下面是一个…

CSDN年度回顾:技术征途上的坚实步伐

嘿&#xff0c;时光过得可真快呀&#xff0c;就像那匹跑得飞快的白马&#xff0c;嗖的一下&#xff0c;2024 年的日历就这么悄无声息地翻到了最后一页。这会儿我回头看看在 CSDN 上度过的这一年&#xff0c;心里那叫一个感慨万千&#xff0c;满满的都是喜悦&#xff0c;就像心里…

搭建一个基于Spring Boot的校园台球厅人员与设备管理系统

搭建一个基于Spring Boot的校园台球厅人员与设备管理系统可以涵盖多个功能模块&#xff0c;例如用户管理、设备管理、预约管理、计费管理等。以下是一个简化的步骤指南&#xff0c;帮助你快速搭建一个基础的系统。 — 1. 项目初始化 使用 Spring Initializr 生成一个Spring …

从 Web1 到 Web3:互联网发展的历史与未来

从 Web1 到 Web3&#xff1a;互联网发展的历史与未来 导语 互联网的演变已经经历了多个重要的阶段&#xff0c;从最初的 Web1 到如今的 Web3&#xff0c;这一路走来&#xff0c;每一次的技术进步和理念创新都极大地改变了我们与世界互动的方式。从简单的信息传递到如今的去中…

基于微信小程序的民宿预订管理系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏&#xff1a;…

HTML 表单和输入标签详解

HTML 表单是网页与用户交互的重要工具&#xff0c;它允许用户输入数据并将其提交到服务器。表单在网页中的应用非常广泛&#xff0c;例如登录、注册、搜索、评论等功能都离不开表单。本文将详细介绍 HTML 表单及其相关标签的使用方法&#xff0c;帮助你全面掌握表单的设计与实现…