数据结构基础(一)

简介: 数据结构是计算机科学中的一个重要概念,用于组织和存储数据以便有效地访问和修改。它是计算机科学的基础之一,几乎在所有领域都有应用,包括算法设计、数据库管理系统、编译器构建等。

1、数据结构的基本概念

数据

  1. 是能输入计算机且能被计算机处理的各种符号合集
  2. 信息的载体
  3. 是对客观事物符号化的表示
  4. 能够被计算机识别、存储和加工

数据元素

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

数据项

一个数据元素可由若干个数据项组成

数据项是数据元素不可分割的==最小单位==

数据对象

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

总结

如果用一张表来描述数据:

学号 姓名 性别 专业
22092323 张倩倩 大数据技术
23232323 李桥 人工智能
32323223 依然 软件工程

数据就是这些学生构成的整体

数据元素就是每一个学生

数据项就是每一条信息,例如张倩倩的学号,性别

数据对象就好比每一个班级的人

而==数据结构==就是互相之间存在的一种或多种特定关系的数据元素集合,比如他们是同一个宿舍,那他们就构成了室友关系

2、数据结构的三要素

逻辑结构

从逻辑关系上描述数据,与数据的存储无关,它是从具体问题抽象出来的数学模型

==逻辑结构的种类:划分方法一==

  • 线性结构:

    有且仅有一个开始和一个终端终点,并且所有结点最多只有一个直接前趋和一个后继

    例如:线性表、栈、队列、串

  • 非线性结构

    一个结点可能有多个直接前趋和直接后继

    例如:树、图

==逻辑结构的种类:划分方法二==

  • 集合:数据元素间除“同属于一个合集”外,无其他关系
  • 线性结构:一个对一个线性关系,如线性表、栈、队列
  • 树形结构:一对多个层次关系
  • 图形结构:多个对多个任意关系

物理结构(存储结构)

数据元素及其关系在计算机中内存中的存储形式(又称映象)

物理结构(存储结构)的种类:

  • 顺序存储
  • 链式存储
  • 索引存储
  • 散列存储

数据的运算

数据上的某些操作。包括增删改查排序等

3、算法基本概念

什么是算法

程序 = 数据结构 + 算法

算法五个特征

有穷性:一个算法必须总在执行有穷步之后结束,且每一步都可在有穷时间内完成。

确定型:算法中每条指令必须有确切的含义,对于相同的输入,只能得出相同的输出

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

输入:一个算法有零个或多个输入,这些输入取自于某个特定的对象的集合

输出:一个算法有一个或多个输出,这些输出是与输入有着某种特定关系的量

==好的算法:==正确性、可读性、健壮性、高效率、低存储

4、时间复杂度

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

#include "stdio.h"

//算法1:逐步递增型爱你
void loveYou(int n){
   
   
    int i = 1;
    while (i<=n){
   
   
        i++;
        printf("I love You");
    }
    printf("end");
}


int main(){
   
   
    loveYou(3000);
}

语句频度:

int i = 1;
    while (i<=n){
   
   
        i++;
        printf("I love You");
    }
    printf("end");


第一句执行了1次

第二句执行了3001次,因为到达3000次的时候,while要再进行一次判断

第三句和第四句执行3000次

第六句执行了1次

则:T(3000) = 1 + 3001 + 2 * 3000 + 1

时间开销与问题规模n的关系:T(n) = 3n + 3

==问题:==是否可以忽略表达式某些部分?

  • 其实是可以的,当n的规模足够大的时候,我们可以只考虑阶数高的部分

时间复杂度的使用规则

  • 加法规则(多项相加,只保留最高阶的项,系数变成1)

    例子:T(n) = n^3^ + n^2^ + 999999

    ​ 改写成:T(n) = O(n^3^) + O(n^2^) + O(1)

  • 乘法规则(多项想乘,都保留)

    例子: T(n) = n^2^ * log~2~n

    ​ 改写成:T(n) = O(n^2^ * log~2~n)

    ==问题:==O(n^3^) 和 O(n^2^ * log~2~n)哪个更大呢

image-20240408203253293

image-20240408203724504

==结论:==

  1. 顺序执行的代码只会影响常数项,可以忽略

  2. 只需要挑循环中的一个基本操作分析它执行次数与n的关系即可

  3. 如果有多层嵌套循环,只需要关注最深层循环循环几次

    image-20240408204214752

5、空间复杂度

空间开销(内存开销)与问题规模n之间的关系

当执行程序的时候,代码会存入内存空间,程序代码在内存的大小固定,与问题规模无关

//算法1:逐步递增型爱你
void loveYou(int n){
   
   
    int i = 1;
    while (i<=n){
   
   
        i++;
        printf("I love You");
    }
    printf("end");
}

无论问题规模怎么变,算法运行所需的内存空间都是固定的常量,算法空间复杂度为S(n)= 0(1)

==注意:==如果算法是常数阶,那称这个算法==原地工作==

image-20240408210117860

相关文章
|
前端开发 JavaScript NoSQL
从前端到后端:构建现代化的全栈应用
本文将探讨如何构建现代化的全栈应用,从前端到后端的技术选型、架构设计和开发实践等方面进行详细介绍。我们将深入研究各种技术工具和框架,如前端开发中的React和Vue,后端开发中的Java和Python,以及数据库管理与优化等,帮助读者全面了解全栈开发的核心概念和实际应用。
|
弹性计算 安全 Ubuntu
阿里云服务器如何安装宝塔面板教程汇总(图文教程)
阿里云服务器如何安装宝塔面板教程汇总(图文教程)
|
前端开发 安全 JavaScript
Python的Flask框架的学习笔记(前后端变量传送,文件上传,网页返回)内含实战:实现一个简单的登录页面
Python的Flask框架的学习笔记(前后端变量传送,文件上传,网页返回)内含实战:实现一个简单的登录页面
827 0
|
机器学习/深度学习 算法 安全
【博士每天一篇文献-综述】Machine Unlearning Taxonomy, Metrics, Applications, Challenges, and Prospects
本文综述了机器遗忘的分类、评价指标、应用场景、挑战和未来研究方向,提出了精确遗忘和近似遗忘的概念,并探讨了机器遗忘在模型优化和防御攻击中的应用,同时讨论了分布式学习环境下的遗忘挑战和解决方案。
858 6
|
前端开发 JavaScript 算法
如何成功步入IT行业:零基础入门指南
如何成功步入IT行业:零基础入门指南
594 2
|
Java 程序员 语音技术
怎么用Java 把多个音频拼接成一个?
**Java音频拼接指南** 在Java中,利用音频处理库`cn.juwatech.*`可合并音频文件。步骤包括导入库,创建`AudioFile`对象,将它们添加到列表,然后用`AudioConcatenator.concat()`拼接成一个文件。注意确保音频格式一致,处理异常,并考虑性能优化。此技术提升用户体验,适用于音频编辑和合成场景。[来源:稀土掘金](https://juejin.cn/post/7387701265797840932)
707 0
|
XML JSON 安全
uni-app API请求封装:让接口调用更加简单高效
在进行uni-app开发时,网络请求是必不可少的环节。为了方便开发,我们可以封装一些网络请求方法,以便在多个页面中复用,并且可以统一处理错误信息等问题,提高开发效率和代码质量。本文将介绍如何封装网络请求方法。
2731 0
uni-app API请求封装:让接口调用更加简单高效
|
存储 NoSQL Redis
Redis集群部署指南
本章是基于CentOS7下的Redis集群教程,包括: ● 单机安装Redis ● Redis主从 ● Redis分片集群
Markdown (CSDN) MD编辑器(三)- 图片缩放、指定尺寸、居中、左对齐、右对齐
Markdown (CSDN) MD编辑器(三)- 图片缩放、指定尺寸、居中、左对齐、右对齐
2694 0
Markdown (CSDN) MD编辑器(三)- 图片缩放、指定尺寸、居中、左对齐、右对齐
|
缓存 Linux
【阿里云镜像】切换阿里巴巴开源镜像站镜像——Debian镜像
Debian GNU/Linux ,是一个操作系统及自由软件的发行版,由一群自愿付出时间和精力的用户来维护并更新。它附带了超过 59000 个软件包,这些预先编译好的软件被打包成一种良好的格式以便于用户安装和使用。
7883 1
【阿里云镜像】切换阿里巴巴开源镜像站镜像——Debian镜像