408数据结构考点总结

news2025/4/7 4:21:20

第一章 绪论

考点 1:时间复杂度与空间复杂度

时间复杂度

定义:将算法中基本运算的执行次数的数量级作为时间复杂度,记为 O ( n ) O(n) O(n)

计算原则

  • 加法法则: T ( n ) = T 1 ( n ) + T 2 ( n ) = O ( f ( n ) ) + O ( g ( n ) ) = O ( max ⁡ ( f ( n ) , g ( n ) ) ) T(n)=T_{1}(n)+T_{2}(n)=O(f(n))+O(g(n))=O(\max (f(n), g(n))) T(n)=T1(n)+T2(n)=O(f(n))+O(g(n))=O(max(f(n),g(n)))
  • 乘法法则: T ( n ) = T 1 ( n ) T 2 ( n ) = O ( f ( n ) ) O ( g ( n ) ) = O ( f ( n ) g ( n ) ) T(n)=T_{1}(n) T_{2}(n)=O(f(n)) O(g(n))=O(f(n) g(n)) T(n)=T1(n)T2(n)=O(f(n))O(g(n))=O(f(n)g(n))

计算方法

  • 列方程法:用于递推实现的算法中,设基本运算运行 x x x次,找出与问题规模 n n n之间的方程关系式,解出 x = f ( n ) x=f\left ( n \right ) x=f(n) f ( n ) f\left ( n \right ) f(n)的最高次数为 k k k,则算法的时间复杂度为 O ( n k ) O\left ( n^{k} \right ) O(nk)
  • 递推公式法:用于递归实现的算法中,设 T ( n ) T\left ( n \right ) T(n)是问题规模为 n n n的算法的时间复杂度, T ( n − 1 ) T(n-1) T(n1)是问题规模为 n − 1 n-1 n1的算法的时间复杂度,建立 T ( n ) T(n) T(n) T ( n − 1 ) T(n-1) T(n1)[或 T ( n − 2 ) T(n-2) T(n2)等]的递推关系式,根据关系式,解出 T ( n ) T(n) T(n)

空间复杂度

定义:指算法运行过程中所使用的辅助空间的大小,记为 S ( n ) S(n) S(n)。算法原地工作是指算法所需辅助空间是常量,即 O ( 1 ) O(1) O(1)

递归算法特性:

  • 一个算法直接或间接调用自身,称为递归调用。
  • 必须有一个明确的递归结束条件,称为递归出口。
  • 实现递归的关键是建立递归调用工作栈。栈的大小也就是递归深度和递归算法空间复杂度的。

第二章 线性表

考点 2:顺序表

定义:指用一组连续的存储单元,依次存储线性表中的各个元素,从而使得逻辑上相邻的元素在物理位置上也相邻,因此可以随机存取(根据首元素地址和元素序号)表中任何一个元素。

基本操作

  • 结构

  • 插入

    若表长为 n n n,下标从0开始,则在第 i i i位置插入元素 e e e,则从 a n a_n an a i a_i ai都要向后移动一个位置,共需移动 n − i + 1 n-i+1 ni+1个元素,平均时间复杂度为 O ( n ) O(n) O(n)

    //判断1的范围是否有效,否则非法
    //判断当前存储空间是否已满,否则不能插入
    for(int j=L.length;j>=i;--)     //将第1个位置及之后的元素后移
      L.data[j]=L.data[j-1];
    L.data[i-1]=e;                 //在位置i处放入e,数组从0开始存储
    L.length++;                    //线性表长度加1
    
  • 删除

    若表长为 n n n,下标从 0 0 0开始,当删除第 i 个元素时,则从 i个元素时,则从 i个元素时,则从 a i + 1 a_{i+1} ai+1 a n a_n an都要向前移动一个位置,共需移动 n − i n-i ni个元素,平均时间复杂度为 O ( n ) O(n) O(n)

    //判断1的范围是否有效
    for(int j=i;j<L.length;j++)     //将第i个位置及之后的元素前移
      L.data[j-1]=L.data[j];
    L.length--;                    //线性表长度减1
    
  • 查找

    1. 按序号(下标)查找:顺序表具有随机存取(根据首元地址和序号)的特点,时间复杂度为 O ( 1 ) O(1) O(1)
    2. 按值查找:主要运算是比较操作,比较的次数与值在表中的位置和表长有关,平均比较次数为 ( n + 1 ) / 2 (n+1)/2 (n+1)/2,时间复杂度为 O ( n ) O(n) O(n)

考点 3:单链表

定义:为了建立元素之间的线性关系,对每个链表结点,除了存放元素自身的信息,还需要存放一个指向其后继的指针。

基本操作

  • 查找

    只能从表中第一个结点出发顺序查找,顺着指针 n e x t next next域逐个往下搜索,直到找到满足条件的结点为止。时间复杂度为 O ( n ) O(n) O(n)

  • 创建

    1. 头插法:从一个空表开始,然后将新结点插入到当前链表的表头,即头结点之后。

      s->next=L->next;  //①新结点的指针指向原链表的第一个结点
      L->next=s;        //②头结点的指针指向新结点,L为头指针
      
    2. 尾插法:将新结点插入到当前链表的表尾上,为此必须增加一个尾指针 r r r,使其始终指向当前链表的尾结点。

      r->next=s;  //原链表中的尾结点(r所指)的指针指向新结点
      r=s;        //r指向新的表尾结点
      
  • 插入

    将值为 x x x的新结点插入到单链表的第 i i i个位置。先检查插入位置的合法性,然后找到待插入位置的前驱结点,即第 i − 1 i-1 i1 个结点,再在其后插入新结点。

    p=GetElem(L,i-1);   //查找插入位置的前驱结点
    s->next=p->next;    //①s的指针指向p的下一结点
    p->next-s;          //②p的指针指向s
    
  • 删除

    将单链表的第 i i i个结点删除。先检查删除位置的合法性,然后查找表中第 i − 1 i-1 i1 个结点,即被删结点的前驱结点,再将其删除。

    p=GetElem(L,i-1);    //查找删除位置的前驱结点
    q=p->next;           //令q指向被删除结点
    p->next=q->next;     //将*q结点从链中"断开"
    delete q;            //释放待删结点所占空间
    
  • 求表长

    1. 不含头结点:从首结点开始依次顺序访问表中的每个结点,为此需要设置一个计数器变量,每访问一个结点,计数器加 1 1 1,直到访问到 N U L L NULL NULL为止。
    2. 不带头结点的单链表的表长时,对空结点需要单独处理。
    len=0;    //1en表示单链表长度,初值设为0
    LNode *p=L->next;    //令p指向单链表的第一个结点
    while(p) {len++;p=p->next;}    //跳出循环时,len的值即为单链表的长度
    

第三章 栈和队列

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

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

相关文章

安全—02day

XMLHttpRequest 对象 AJAX 通过原生的XMLHttpRequest对象发出 HTTP 请求&#xff0c;得到服务器返回的数据后&#xff0c;再进行处理。现在&#xff0c;服务器返回的都是 JSON 格式的数据&#xff0c; XMLHttpRequest本身是一个构造函数&#xff0c;可以使用new命令生成实例。…

T113_PRO-S3_GPS解析

今天主要是以市面上能买到的最新款的GPS作为解析的依据&#xff0c;市面上能买的GPS目前最新的串口打印的格式主要是如下&#xff1a; $GNGGA,085126.000,2311.77819,N,11323.44968,E,1,15,1.5,36.7,M,0.0,M,,*4C $GNGLL,2311.77819,N,11323.44968,E,085126.000,A,A*4B $GPGSA…

Java入门-0基础学Java-01Java环境变量配置

JDK的下载与安装jdk下载地址&#xff1a;https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html选择与电脑系统匹配的版本进行下载&#xff08;Windows系统如果是32位下载Windows x86&#xff0c;64位下载Windows x64&#xff0c;苹果的下载M…

Go语言设计与实现 -- 调度器总体概述

Go语言调度器使用与CPU数量相等的线程来减少线程频繁切换带来的内存开销&#xff0c;同时在每一个线程上执行额外开销更低的Goroutine来降低操作系统和硬件的负载。 每一次线程上下文切换都需要消耗约1us的时间&#xff0c;而Go调度器对Goroutine的上下文的切换约为0.2us&#…

01_FreeRTOS基础知识

目录 裸机与RTOS介绍 裸机与RTOS特点 FreeRtos简介 任务调度简介 抢占式调度 时间片调度 协程式调度 任务状态 裸机与RTOS介绍 假设小明在打游戏,此时女盆友微信回复了信息。 裸机:在裸机上实现是等这游戏打完之后,在去回复女朋友的信息,假设游戏刚刚开始打完需要半小…

使用缓存保护MySQL

1 更新缓存最佳实践 Redis的执行器非常薄&#xff0c;所以Redis只支持有限API&#xff0c;几乎没聚合查询能力&#xff0c;也不支持SQL。存储引擎也简单&#xff0c;直接在内存中用最简单数据结构保存数据。 如Redis的LIST在存储引擎的内存中的数据结构就是双向链表。内存是易…

基于ONNX人脸识别实例(SCRFD/ArcFace)-C#版

一、引用 Microsoft.ML.OnnxRuntime OpenCvSharp OpenCvSharp.Extensions二、人脸检测(Face Detection) using System; using System.Collections.Generic; using System.Linq; using Microsoft.ML.OnnxRuntime; using Microsoft.ML.OnnxRuntime.Tensors; using OpenCvSharp;…

c++11 标准模板(STL)(std::deque)(十)

定义于头文件 <deque> std::deque 修改器 移除首元素 std::deque<T,Allocator>::pop_front void pop_front(); 移除容器首元素。若容器中无元素&#xff0c;则行为未定义。 指向被擦除元素的迭代器和引用被非法化。若元素是容器中的最后元素&#xff0c;则尾后…

2022 数字IC设计秋招复盘——数十家公司笔试题、面试实录

0 引言 秋招结束了。 “今年是前五年最差的一年&#xff0c;也将是后五年最好的一年”&#xff0c;虽然无法预知后面的就业情况&#xff0c;但就我今年自己的亲身经历与去年师兄师姐找工作的情况对比&#xff0c;感觉难度确实是增大了很多。我总共投递了80家左右的公司&#…

德云社相声春晚未播先火,郭德纲独揽三个节目,四位老艺术家助阵

随着央视春晚的二次彩排&#xff0c;德云社相声春晚&#xff0c;也被安排到议事日程当中&#xff0c;听说今年的相声春晚还颇有看点。由于缺少了岳云鹏张云雷等得力干将&#xff0c;郭德纲老师决定亲自下场&#xff0c;一个人就独揽了三个节目。 按说德云社举办相声春晚&#x…

乒乓普及套及廉价底板评测

疫情的末端期间开始打乒乓球&#xff0c;最开始在单位打&#xff0c;后来去了花园和大爷们打。用了几个拍子和胶皮&#xff0c;都是网上最便宜的&#xff0c;现在在野球场能排到前十吧&#xff0c;我打球比较“正”&#xff08;他人评价&#xff09;&#xff0c;大家比较愿意和…

基于Java+SpringBoot+vue+element等动物救助平台设计和实现

基于JavaSpringBootvueelement等动物救助平台设计和实现 博主介绍&#xff1a;5年java开发经验&#xff0c;专注Java开发、定制、远程、文档编写指导等,csdn特邀作者、专注于Java技术领域 作者主页 超级帅帅吴 Java毕设项目精品实战案例《500套》 欢迎点赞 收藏 ⭐留言 文末获取…

数字人民币创新浪潮来袭,支付机构如何“乘风破浪”?

易观&#xff1a;近年来&#xff0c;数字经济浪潮迭起&#xff0c;数字科技方兴未艾。法定数字货币作为各国政府掌握货币发行控制权的重要载体&#xff0c;正在全球范围内全面铺开。法定数字货币的推出将大幅提升货币的流转效率&#xff0c;为央行管理职能赋予了数字化内涵。可…

Golang 常用字符串函数

统计字符串长度&#xff0c;按字节 len(str)str : "你好" fmt.Println("len", len(str))字符串遍历&#xff0c;同时处理有中文的问题 s : []rune(str)str : "你好" s : []rune(str) for i : 0; i < len(s); i {fmt.Printf("string%c\n&…

安全知识答题小程序v2.0与v3.0的异同点一览

安全知识答题小程序安全知识答题小程序这个软件架构是微信原生小程序云开发。主要包含六大功能模块页面&#xff0c;首页、答题页、结果页、活动规则页、答题记录页、排行榜页。v2.0的功能有以下&#xff1a;排行榜页答题记录页活动规则页微信授权登录获取微信头像和昵称等首页…

SQL SELECT TOP, LIMIT, ROWNUM 子句

SQL SELECT TOP 子句 SELECT TOP 子句用于规定要返回的记录的数目。 SELECT TOP 子句对于拥有数千条记录的大型表来说&#xff0c;是非常有用的。 注意:并非所有的数据库系统都支持 SELECT TOP 语句。 MySQL 支持 LIMIT 语句来选取指定的条数数据&#xff0c; Oracle 可以使用…

java后端第五阶段:Git

一、开发场景 备份、代码还原、协同开发、追溯问题代码的编写人和编写时间&#xff01; 安装&#xff1a;直接去官网下载&#xff0c;傻瓜式安装 二、Git常用指令 1.设置用户签名 git config --global user.name 用户名 git config --global user.email 邮箱 2.初始化本地仓…

用存储过程、定时器、触发器来解决数据分析问题

做数据分析或者数据处理&#xff0c;我们也需要掌握这些技能&#xff0c;来解决特定的业务问题。比如&#xff1a;做自动化报表&#xff0c;如果数据需要每天实时更新&#xff08;增量爬虫&#xff09;、定时计算某个业务指标 、想要实时监控数据库表中的数据增、删、改情况等。…

四万字总结Redis语法、配置、实战

文章目录一、安装1.Linux下安装下载解压安装修改配置设置环境变量启动、连接查看redis进程退出2.windows下安装下载并解压二、系统管理1.常用key相关的命令2.时间相关命令3.设置相关命令CONFIG GET & CONFIG SET4.查询信息5.密码设置三、基本数据类型1.Redis strings2.Redi…

Golang常用结构源码01-Map

Golang集合源码-Map 22届211本科&#xff0c;在字节实习了一年多&#xff0c;正式工作了半年&#xff0c;工作主要是golang业务研发&#xff0c;go语言使用和生态比java简洁很多&#xff0c;也存在部分容易遇见的问题&#xff0c;常用结构需要对其底层实现略有了解才不容易写出…