嵌入式学习day17(数据结构)

大纲

数据结构、算法
数据结构:

  1. 线性表:顺序表、链表(单向链表,单向循环链表,双向链表,双向循环链表)、栈(顺序栈,链式栈)、队列(循环队列,链式队列)
  2. 树:二叉树、遍历、创建
    算法:
    查询方法、排序方式

为什么要学数据结构?

1.C语言是学习如何写程序,数据结构是学习如何简洁高效的写程序

2.如果遇到一个实际问题,需要写代码实现相应功能,需要解决两个问题:

(1).如何表达数据间的逻辑关系以及怎么存储到计算机当中?

数据结构:数据的逻辑结构以及存储操作

数据:不再是单纯的数字,而是类似于一个集合的概念

结构:数据之间的关系

(2).采用什么方法去解决?

采用算法去解决

数据结构+算法=程序

一丶数据结构

1.概念

数据的逻辑结构,存储结构及操作(数据的运算)

2.数据

数据:不再是单一的数值,而是类似于集合的概念
数据元素:是数据的基本单位,由若干个数据项组成
数据项:是数据的最小单位,描述数据元素信息
数据元素又叫节点

3.结构

3.1逻辑结构

数据元素并不是独立存在的,他们之间存在着某种关系(联系或结构)。

元素和元素之间的关系:
线性关系:
线性关系 ---》 线性结构 ---》一对一 ----》线性表:顺序表、链表、栈、队列
层次关系:

层次关系 ---》 树形结构 ---》一对多 --- 》 树:二叉树
**网状结构:**网状关系 ---》 图状结构 ---》 多对多 ---》图

3.2存储结构

数据的逻辑结构在计算机中的具体体现(数据的运算)

顺序存储:

特点:内尺连续,随机存取,每个元素占用较少

实现:数组

链式存储:

特点:内存不连续,通过指针实现

链表实现:通过定义结构体,里面是数据域和指针域

cs 复制代码
#include<stdio.h>
struct node
{
    int data;//数据域,存放节点要保存的地址
    struct node *next;//指针域,指向下一个节点的地址(类型为结构体指针)
};
int main(int argc, char const *argv[])
{   //定义三个节点
    struct node A={1,NULL};
    struct node B={2,NULL};
    struct node C={3,NULL};
    //连接三个节点
    A.next=&B;//连接A和B节点,让A中的指针域保存B的地址
    B.next=&C;//连接B和C节点,让B中的指针域保存C的地址
    printf("%d\n",A.data);//打印A中的数据域
    printf("%d\n",(A.next)->data);//打印B中的数据域
    printf("%d\n",(A.next)->next->data);//打印C中的数据域
    return 0;
}

索引存储:
在存储数据的同时,建立一个附加的索引表。
也就是索引存储结构 = 索引表 + 存数据的文件
可以提高查找速度,特点检索速度快,但是占用内存多,删除数据文件要及时更改索引表。

散列存储:

数据在存储的时候与关键码之间存在某种对应关系
存的时候按照对应关系存
取的时候按照对应关系取

4.操作

增、删、改、查

二丶算法

1.概念

算法就是解决问题的思想方法,数据结构就是算法的基础

2.算法的设计

算法的设计:取决于数据的逻辑结构

算法的实现:依赖于数据的存储结构

3.算法的特点

有穷性:步骤是有限的

确定性:每一个步骤都有明确的含义,无二义性

可行性:在规定时间内可以完成

输入

输出

4.评价算法的好坏

正确性 :保证算法可以正确实现功能
易读性 :容易被解读
健壮性 : 容错处理
高效性 :执行效率,算法执行快慢容易受到计算机性能的影响,不可以作为评判算法高效性的标准,这通过可执行语句重复执行次数来衡量算法是否高效 。(时间复杂度)
低存储性 : 占用空间少

5.时间复杂度

算法的可重复执行语句执行的次数, 通常时间复杂度用一个问题规模函数来表达
T(n) = O(f(n))
T(n) //问题规模的时间函数
n //问题规模,输入量的大小
O //时间数量级
f(n) //算法的可执行语句重复执行的次数 用问题规模n的某个函数f(n)来表达

计算大O的方法
(1)根据问题规模n写出表达式 f(n)
(2) 只保留最高项,其它项舍去
(3) 如果最高项系数不为1,除以最高项系数
(4) 如果有常数项,将其置为1 //当f(n)的表达式中只有常数项的时候,有意义 f(n) = 8

如:f(n)=8 ->O(1)
f(n) = 3n^5 + 2 n^3 + 6*n^6 + 10->O(n^6)

6.空间复杂度

算法占用的空间大小。一般将算法的辅助空间作为衡量空间复杂度的标准。

算法占用的存储空间包括:
1.输入输出数据所占空间
2.算法本身所占空间
3.额外需要的辅助空间

相关推荐
Hello_Embed5 小时前
STM32HAL 快速入门(二十):UART 中断改进 —— 环形缓冲区解决数据丢失
笔记·stm32·单片机·学习·嵌入式软件
咸甜适中5 小时前
rust语言 (1.88) 学习笔记:客户端和服务器端同在一个项目中
笔记·学习·rust
Magnetic_h6 小时前
【iOS】设计模式复习
笔记·学习·ios·设计模式·objective-c·cocoa
研梦非凡7 小时前
ICCV 2025|从粗到细:用于高效3D高斯溅射的可学习离散小波变换
人工智能·深度学习·学习·3d
limengshi1383928 小时前
机器学习面试:请介绍几种常用的学习率衰减方式
人工智能·学习·机器学习
知识分享小能手8 小时前
React学习教程,从入门到精通,React 组件核心语法知识点详解(类组件体系)(19)
前端·javascript·vue.js·学习·react.js·react·anti-design-vue
周周记笔记9 小时前
学习笔记:第一个Python程序
笔记·学习
散1129 小时前
01数据结构-01背包问题
数据结构
优雅鹅9 小时前
ARM、AArch64、amd64、x86_64、x86有什么区别?
arm开发·学习
..过云雨9 小时前
05.【Linux系统编程】进程(冯诺依曼体系结构、进程概念、进程状态(注意僵尸和孤儿)、进程优先级、进程切换和调度)
linux·笔记·学习