【408计算机考研课程】数据结构-数据结构在学什么?

news2025/2/5 17:55:23

前言

数据结构在学什么?

  • 如何用程序代码把现实世界的问题信息化
  • 如何用计算机高效地处理这些信息从而创造价值

第一章:数据结构在学什么?

总览

什么是数据?

简介:数据是信息的载体,是描述客观事物属性的数、字符及所有能输入到计算机中并被计算机程序识别和处理的符号的集合,数据是计算机加工的原料。

数据元素、数据项

数据元素

是数据的基本单位,通常作为一个整体进行考虑和处理。

数据项:

一个数据元素可有若干个数据项组成,数据项是构成数据元素的不可分割的最小单位。

什么是数据对象

数据对象:

是具有相同性质的数据元素的集合,是数据的一个子集

数据结构

数据结构:

是相互之间存在一种或多种特定关系的数据元素的集合。

分类:

线性数据结构(xx排行榜)、网状数据结构(xx好友关系图)

同一个数据对象中的数据元素,可以组成不同的数据结构

数据结构三要素

三要素:

逻辑结构

分类:集合结构、线性结构(一对一)、树形结构(一对多)、图状结构(多对多)

数据的运算

物理结构(存储结构)

逻辑结构

集合结构

集合:

各个元素同属于一个集合,别无其他关系

线性结构

线性结构:

数据元素之间是一对一的关系

除了第一个元素,所有元素都有唯一的前驱

除了最后一个元素,所有元素都有唯一的后继

树形结构

树形结构:

数据元素之间是一对多的关系

图状结构

图状结构:

数据元素之间是多对多的关系

数据的运算

简介:针对与某种逻辑结构,结合实际需求,定义基本运算

  • 针对线性结构存在的基本运算
    • 查找第I个数据元素
    • 在第I个位置插入新的元素
    • 删除第I个元素

物理结构(存储结构)

数据的存储结构:

顺序存储

链式存储

索引存储

散列存储

顺序存储

说明:使用线性结构举例

把逻辑上相邻的元素存储在物理位置上也相邻的存储单元中,元素之间的关系有存储单元的邻接关系来体现。

链式存储

说明:使用线性结构举例

链式存储:

逻辑上相邻的元素在物理位置上可以不相邻,借助指示元素存储地址的指针来表示元素之间的逻辑关系。

索引存储

说明:使用线性结构举例

索引存储:

在存储元素信息的同时,还建立附加的索引表,在索引表中的每一项称为索引项,索引项形式为:(关键字,地址)

散列存储

散列存储:

根据元素的关键字直接计算出该元素的存储地址,又称为哈希存储。

数据类型、抽象数据类型

数据类型:

是一个值的集合和定义在此集合上的一组操作的总称。

数据类型分类:

原子类型(值不可再分的数据类型):bool、int类型

结构类型(值可以再分为若干成分):结构体类型

抽象数据类型:

是抽象数据组织与之先关的操作

算法基本概念

知识总览:

什么是算法?

程序= 数据结构 + 算法

举例说明:番茄炒蛋

数据结构等于:食材

算法等于:完成番茄炒蛋的具体步骤(求解问题的步骤)

算法的五个特性

有穷性:必须在固定的时间或步骤中完成所走的步骤

确定性:算法处理的程序结果永远是一致的,不存在多种结果的情况。

可行性;算法中描述的操作都可以通过已实现的基本运算执行有限次来实现。

输入:一个算法有0个或多个输入,

输出:一个算法有-个或多个输出。

好算法的特质

正确性:可以正确的解决问题

可读性:具有良好的可读性,帮助人们好理解

健壮性:遇到非法数据时,能够适当的作出反应应对,而不会产生奇怪的结果。

高效率:算法执行时间快,时间复杂度低

低存储量需求:空间复杂度低,不费内存

算法效率的度量

时间复杂度

![](https://img-blog.csdnimg.cn/img_convert/6b41362d6bef223d7e374404fc18bde3.png)

时间复杂度:

事前预估算法时间开销**T(n)**与问题规模n的关系(T 表示 Time)

  • 案例分析1

/**
T(3000) = 1 +3001+2*3000+1
时间开销与问题规模n的关系:
                            T(n) = 3n+3= O(n) // 常数阶直接用n

结论一:顺序执行的代码只会影响常数项,可以忽略
结论二:只需挑循环中一个基本操作,分析它的执行次数与n的关系即可。
结论三:如果有多层嵌套循环,只需关注最深层循环了几次
*/
#include <stdio.h>

void loveYou(int num  ) {
    int i = 1;
    while(i<=num) {
        printf("%d\n", i);
        i++;
    }
    printf("exit");
}
int main() {
    loveYou(3000);
    return 0;
}
  • 案例分析2

  • 时间复杂度简化过程

如果时间复杂度项过于长的话,可以保留最高项

结论:当问题规模n足够大时,可以只考虑阶数高的部分

简化为:

  • 比较阶数更高的项:

  • 练习题1

  • 练习题2

  • 总结

时间复杂度度量标准:

最坏时间复杂度:最坏情况下算法的时间复杂度

平均时间复杂度:所有输入示例等概率出现的情况下,算法的期望运行时间

最好时间复杂度(参考意义不大):最好情况下算法的时间复杂度

空间复杂度

空间复杂度:衡量内存空间开销与问题规模n之间的关系

程序空间复杂度分析:只需要关注存储空间大小与问题规模相关的变量

  • 案例分析1:

  • 案例分析2:

程序空间复杂度分析:只需要关注存储空间大小与问题规模相关的变量

  • 案例分析3

分析:4nn+4+4

S(O)=o(n的二次方)

  • 案例分析4

分析:4nn+4*n+4+4

S(O)=o(N的二次方)

  • 案例分析5:

分析:

递归第一次:5,a,b,c

递归第二次:4,a,b,c

递归第三次:4,a,b,c

S(O)=O(n)

总结:空阿复杂度=递归调用的深度

  • 案例分析5修改:

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

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

相关文章

【在Linux世界中追寻伟大的One Piece】进程信号

目录 1 -> 信号入门 1.1 -> 生活角度的信号 1.2 -> 技术应用角度的信号 1.3 -> 注意 2 -> 信号的概念 2.1 -> 用kill -l命令可以查看系统定义的信号列表 2.2 -> 信号处理常见方式 3 -> 产生信号 3.1 -> Core Dump 3.2 -> 调用系统函数…

已解决-Nacos明明成功运行,但Spring报错连接不上

这天使用windows本地nacos的时候&#xff0c;一直报错&#xff1a; Caused by: com.alibaba.nacos.api.exception.NacosException: Request nacos server failed: Caused by: com.alibaba.nacos.api.exception.NacosException: Client not connected, current status:STARTIN…

(计算机组成原理)

计算机的发展 计算机系统硬件&#xff08;计算机的实体&#xff0c;如主机&#xff0c;外设等&#xff09;软件&#xff08;由具有各种特殊功能的程序组成&#xff09; 硬件是计算机系统的物理基础&#xff0c;硬件决定瓶颈&#xff0c;软件决定性能发挥的程度 第一台电子数字计…

YOLOv4和Darknet实现坑洼检测

关于深度实战社区 我们是一个深度学习领域的独立工作室。团队成员有&#xff1a;中科大硕士、纽约大学硕士、浙江大学硕士、华东理工博士等&#xff0c;曾在腾讯、百度、德勤等担任算法工程师/产品经理。全网20多万粉丝&#xff0c;拥有2篇国家级人工智能发明专利。 社区特色…

IDEA如何自定义创建类的文档注释

说明&#xff1a;在IDEA中&#xff0c;创建一个Java类文件&#xff0c;会在类上面自动生成文档注释&#xff0c;如下&#xff1a; 看样子&#xff0c;默认是计算机的用户名&#xff0c;然后加上当前的创建时间。可以在IDEA中的Setting中设置&#xff0c;如下&#xff1a; /*** …

汽车追尾为什么是后车的责任?

简单点说&#xff1a;因为人后面没有长眼睛。 结论 在汽车追尾事故中&#xff0c;通常情况下后车被认为是责任方的原因在于交通法规对驾驶安全标准的约定和实践中的责任识别原则。虽然追尾事故常见地被归责于后车&#xff0c;但具体判断并不是绝对的&#xff0c;仍需综合多种…

C++11中的特性

这里主要讲解一些C11相较于C98所新增的比较实用的新特性。 C11的官方文档&#xff1a;C11 - cppreference.comhttps://en.cppreference.com/w/cpp/11 一、列表初始化&#xff08;List-initialization&#xff09; &#xff08;一&#xff09;、使用“{}”进行初始化 在C98中&…

有关自连接表的统一封装

表结构 RecursionBean Getter Setter ToString JsonInclude(JsonInclude.Include.NON_EMPTY) public class RecursionBean<T> extends BaseVO {/*** 编号*/private T id;/*** 父权限ID&#xff0c;根节点的父权限为空* 注释掉JsonIgnore&#xff0c;是为了前端判断是否…

Linux驱动开发常用调试方法汇总

引言&#xff1a;在 Linux 驱动开发中&#xff0c;调试是一个至关重要的环节。开发者需要了解多种调试方法&#xff0c;以便能够快速定位和解决问题。 1.利用printk 描述&#xff1a; printk 是 Linux 内核中的一个调试输出函数&#xff0c;类似于用户空间中的 printf。它用于…

CE找CSGO人物坐标和视角基址-幽络源原创

前言 幽络源站长本次免费分享的是CE找CSGO人物坐标和视角基址 本教程分为两篇&#xff0c;当前为上篇->找基址 所具备的知识 CE的使用 教程目的 通过CE找到一些基地址&#xff0c;然后结合Python实现CSGO的透视绘制&#xff0c;这里我们是纯手写透视。 第一步&#x…

如何使用CMD命令启动应用程序(二)

说明&#xff1a;去年1024发布了一篇博客&#xff0c;介绍如何使用CMD命令启动应用程序&#xff0c;但实际情况&#xff0c;有些程序可能无法用配置环境变量的方式来启动&#xff0c;本文针对两种情况下的程序&#xff0c;如何使用CMD命令来启动&#xff0c;算是对上一篇博客的…

Java开发必知必会的一些工具

本文主要介绍 Java 程序员应该学习的一些基本和高级工具。 如果你想成为一名更好的程序员&#xff0c;最重要的技巧之一就是学习你的编程工具。 Java 世界中存在着如此多的工具&#xff0c;从 Eclipse、NetBeans 和 IntelliJ IDEA 等著名的 IDE 到 JConsole、VisualVM、Eclipse…

class 004 选择 冒泡 插入排序

我感觉这个真是没有什么好讲的, 这个是比较简单的, 感觉没有什么必要写一篇博客, 而且这个这么简单的排序问题肯定有人已经有写好的帖子了, 肯定写的比我好, 所以我推荐大家直接去看“左程云”老师的讲解就很好了, 一定是能看懂的, 要是用文字形式再写一遍, 反而有点画蛇添足了…

计算机视觉算法知识详解(含代码示例)

✅作者简介&#xff1a;2022年博客新星 第八。热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏…

算法: 二分查找题目练习

文章目录 二分查找二分查找在排序数组中查找元素的第一个和最后一个位置搜索插入位置x 的平方根山脉数组的峰顶索引寻找峰值寻找旋转排序数组中的最小值点名 总结精华模版 二分查找 二分查找 没啥可说的,轻轻松松~ class Solution {public int search(int[] nums, int target…

IDEA 配置 Git 详解

本文将介绍在IntelliJ IDEA 中如何配置Git 没有安装配置 Git 的可以参考我的这篇文章&#xff1a;安装配置 Git 一、操作环境及准备 1.win 10 2.已安装且配置了Git 3.有Gitee账户 4.安装了IntelliJ IDEA 2023.2.1 5.全程联网 二、配置步骤 2.1 配置git 1.采用全局设置&…

Pragmatic Task务实任务——指导语义通信的优化

1. 语义通信 语义通信&#xff08;Semantic Communication&#xff09;的核心理念是传递不仅仅是数据本身&#xff0c;而是数据所包含的“语义”或“意义”。这与传统通信系统不同&#xff0c;传统系统只注重如何准确、高效地传输数据&#xff0c;而语义通信则要求传输的信息能…

基于Pcap4j收发自定义协议报文(注意事项/踩坑总结)

大致内容&#xff1a;完善自定义的Cat21协议&#xff0c;补充至少5个数据类型不同的协议字段 用户输入Cat21协议字段&#xff0c;发送数据包 用户捕获Cat21数据包&#xff0c;打印输出字段值 本篇博客是直接将自定义协议报文封装在MAC帧的payload中的。 一、Cat21Packet类 1…

拓扑排序简介

拓扑排序(Topological Sort)是一种重要的图算法,用于对有向无环图(DAG, Directed Acyclic Graph)中的节点进行排序。拓扑排序的结果是一种线性序列,使得对于图中的任意一条有向边(u, v),顶点u都在顶点v之前。这种排序常用于任务调度、编译器依赖关系分析等领域。 拓…

算法题总结(八)——字符串

531、反转字符串二 给定一个字符串 s 和一个整数 k&#xff0c;从字符串开头算起&#xff0c;每计数至 2k 个字符&#xff0c;就反转这 2k 字符中的前 k 个字符。 如果剩余字符少于 k 个&#xff0c;则将剩余字符全部反转。如果剩余字符小于 2k 但大于或等于 k 个&#xff0c…