算法章节 数组、链表、栈、队列

数组

概念与特性

1,数组是线性表,用一组连续的内存空间存储⼀组具有相同类型的数据

2,最大的特性是⽀持按照下标O(1)时间复杂度内快速访问数组元素

3,⼀维数组寻址公式:a[i]_addr = base_addr + i * data_type_size

操作与复杂度

1. 随机访问时间复杂度是O(1);
2. 在数组中间任意位置插⼊数据的时间复杂度是O(n);

3. 删除数组中任意位置数据的时间复杂度是O(n)

应⽤场景数组是其他数据结构和算法的实现基础,⽐如栈、队列、堆、⼆分查找等
其他知识点1. 数组需要连续的内存空间,对内存的要求较⾼;
2. 数组中的数据连续存储,对CPU缓存友好;
3. ⼤部分编程语⾔中,数组下标都是从0开始编号;
4. ⼤部分编程语⾔中,都提供了容器类型以⽀持动态数组(动态扩容);
5. 编程语⾔中的数组类型并不等同于数据结构中讲的数组;
掌握程度能够⾃⼰动⼿实现⼀个动态数组类

链表

概念与特性1. 链表是线性表,不需要连续的内存空间来存储元素,通过指针将串联每个链表中的结点;
2. 常⽤的链表结构有:单链表、双向链表、循环链表,其中双向链表因为⽀持在O(1)时间复杂度内找到前驱结点,在实际开发中最常⽤;
操作与复杂度

1. 与数组对⽐,查找第i个元素的时间复杂度是O(n);

2. 在已知前驱结点的情况下,单链表中插⼊数据的时间复杂度是O(1);
3. 在已知前驱结点的情况下,单链表中删除数据的时间复杂度是O(1);
注意:上⾯的插⼊、删除操作,都是针对已知前驱结点的情况,如果未知前驱结点,在单链表中插⼊、删除数据时间复杂度是O(n),⽽在双向链表 中插⼊、删除数据的时间复杂度仍然是O(1)。这也是双向链表⽐单链表更常⽤的主要原因。

应⽤场景链表是其他数据结构和算法的实现基础,⽐如跳表、散列表等
其他知识点1. 链表中的数据不连续存储,对CPU缓存不友好;
2. 在实际的编程中,可定义有头链表,也可以定义⽆头链表;有头链表指的是链表中的头结点不存储数据;
掌握程度

1. 熟练实现单链表、双向链表、循环链表的定义和操作

2. 熟练实现经典的链表题⽬,⽐如反转链表、链表求中间结点、合并有序链表、删除链表倒数第K个结点等;

概念与特性1. 栈是⼀种操作受限的线性表,只能在⼀端插⼊删除数据;
2. 栈的最⼤特性是先进后出;
操作与复杂度1. ⼊栈操作,在栈顶放⼊数据,时间复杂度是O(1);
2. 出栈操作,从栈顶取出数据,时间复杂度是O(1);
应⽤场景1. 函数调⽤栈;
2. 编译器利⽤栈来实现表达式求值;
3. 浏览器中的前进后退功能的实现也会⽤到栈;
其他知识点1. 栈既可以⽤数组来实现,也可以⽤链表来实现;
2. 基于数组实现的⽀持动态扩容的栈的插⼊操作的均摊时间复杂度是O(1);
掌握程度1. 熟练利⽤数组实现⼀个栈;
2. 熟练利⽤链表实现⼀个栈;
3. 掌握基于数组实现的⽀持动态扩容的栈的插⼊操作的时间复杂度分析;
4. ⽤栈检查括号是否匹配,⽐如:{[()]()[{}]}或[{()}([])]等都为合法格式,⽽{[}()]或[({)]为不合法的格式;

队列

概念与特性1. 队列是⼀种操作受限的线性表,只能在两端插⼊、删除数据;
2. 队列的最⼤特性是先进先出;
 
操作与复杂度1. ⼊队操作,在队尾插⼊数据,时间复杂度是O(1);
2. 出队操作,从队头取出数据,时间复杂度是O(1);
应⽤场景队列常⽤在有限资源池中,⽤于排队请求,⽐如数据库连接池等;
其他知识点1. 队列既可以⽤数组来实现,也可以⽤链表来实现;
2. 最常使⽤的队列是基于数组实现的循环队列;
掌握程度熟练实现⼀个循环队列,重点是掌握队列的判空和判满条件;

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

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

相关文章

武忠祥.高等数学.基础课-第一章函数 极限 连续P10

sin(1/x) 详细解析网址 1.图像 2.极限 x–>0时,函数极限不存在 sin2x 详细作图网址 1.图像 2.周期为Π f(x)周期为T,f(axb)周期为T/|a| 所以sinx周期为2Π,sin2x周期为2Π/2Π |sinx| 详细讲解网址 1.图像 2.周期:Π 3.绝对值 (1)y|sinx|的图…

Java命令:jstat — 查看JVM的GC信息

文章目录一、简介二、常用命令1、jstat -class pid : class loader行为统计2、jstat -compiler pid : JIT编译器行为统计3、jstat -gc pid 5000 20 : 垃圾回收堆行为统计4、jstat -gccapacity pid 5000 20 : 堆内存统计5、jstat -gcutil pid 5000 20 : 总结垃圾回收统计6、jsta…

算法章节 递归、排序、⼆分查找

递归 概念与特性函数调⽤函数⾃身的编程⽅式叫做递归,调⽤为”递“,返回为”归“三个条件1. ⼀个问题的解可以分解为多个⼦问题的解; 2. 分解之后的⼦问题,除了数据规模不同,求解思路跟原问题相同; 3. 存在…

codeforces 50A-C语言解题报告

50A题目网址 解题报告-others 题目解析 1.输入n x m大小的木板,使用21大小的多米诺去填满,求最多的多米诺数目 2.通过分析把木板分为奇数和偶数的情况 1)有一边是偶数的情况: 使用2去填满 2)两个边都是奇数 奇数-1偶数 还是让木板的(奇数-1)边去和2平行,再加上 (m-1)/2(n/1)…

Java命令:jps — 查看进程信息

文章目录一、简介二、常用命令1、jps2、jps -l3、jps -q4、jps -m5、jps -v6、jps失效一、简介 JVM Process Status Tool,显示指定系统内所有的HotSpot虚拟机进程。 功能: 显示当前所有java进程pid的命令,我们可以通过这个命令来查看到底启…

操作系统概述 记录操作系统相关知识

操作系统 现代计算机系统由一个或多个处理器、主存、打印机、键盘、鼠标、显示器、网络接口以及各种输入/输出设备构成。上面提到的这些东西都属于硬件资源,用户不会直接和硬件进行交互,计算机安装了一层软件,这层软件能够通过响应用户输入的…

2014年英语一作文partA

作文讲解网址 题目 Write a letter of about 100 words to the president of your university, suggesting how to improve students’ physical condition. You should include the details you think necessary. You should write neatly on the ANSWER SHEET. Do not sign…

JDK工具使用大全

文章目录一、简介一、简介 在JDK的bin目录下有很多命令行工具: 常用工具使用详解如下: Java命令:jps — 查看进程信息 Java命令:jstack — 获取线程dump信息 Java命令:jmap — 打印指定进程的共享对象内存映射或…

Linux进程 excel族函数的用法

介绍 使用fork创建一个进程之后,经常会在新进程中调用exec函数执行别的程序当前进程调用exec函数之后,这个进程会被完全替代换成新的程序,即便如此仍然是同一个进程,进程ID不变函数族 execl execlp execle execvp execvpe头文件 …

codeforces 118A-C语言解题报告

118A题目网址 题目解析 1.输入一个英语字符串,要求把其中的元音字母删去(元音是字母“A”、“O”、“Y”、“E”、“U”、“I”包括大小写,其余的是辅音),把剩余的辅音字母全部变为小写,并在每一个辅音字母之前加上一个. 如: 输入: Codeforces 输出: .c.d.f.r.c.s…

ArrayList和HashMap遍历比较

目录一、ArrayList遍历方式1、普通for循环遍历2、增强for循环遍历3、Iterator迭代器遍历4、三种方式比较二、Map遍历方式1、增强for循环 keySet() 遍历2、增强for循环 entrySet() 遍历3、Iterator keySet() 遍历4、Itorator entrySet() 遍历5、四种方式比较三、java开发手册…

C++primer 12章 动态内存和智能指针

C引入智能指针的目的 使用智能指针来管理动态分配的对象,当一个对象应该被释放的时候,指向他的智能指针确保自动释放它 内存分配 静态内存:局部static对象、类static数据成员、定义在任何函数之外的变量栈内存:定义在函数内的非…

Mac下iTerm2的安装与配置

目录一、iTerm2简介二、下载以及安装三、iTerm2主题配置四、配置Oh My Zsh1、安装方式(1)一键安装(2)手动安装3、切换zsh4、修改主题五、配置Meslo字体六、声明高亮七、自动建议填充八、iTerm2快速隐藏和显示九、iTerm2隐藏用户名…

codeforces 282A-C语言解题报告

282A题目网址 题目解析 1.第一行输入n(表示有n条语句都要执行),再输入X,X(都表示X1),–X,X–(都表示X-1),最初X0,输出X的值 2.使用字符数组去存放每一行的字符串,因为字符串,所以直接整体存入scanf("%s",c); 3.因为字符数组最后一个是’\0’去表示末尾,所以要开辟…

Java命令:jinfo — 查看进程参数

目录一、简介二、常用命令1、jinfo -flags pid : 打印当前指定java进程中已经设定的所有JVM参数信息2、jinfo -flag pid : 打印指定名称的参数3、jinfo -flag [|-] pid : 打开或关闭参数4、jinfo -sysprops pid : 打印当前java进程中设定的系统环境参数一、简介 jinfo 是 JDK …

C++primer第八章 IO库 8.1 IO类

IO库设施 istream (输入流)类型,提供输入操作。ostream (输出流)类型,提供输出操作。cin,—个 istream对象,从标准输入读取数据。cout, 一个ostream对象,向标准输出写入数据。cerr…

2014年英语一作文partB漫画作文

题目 Write an essay of 160-200 words based on the following drawing.In your essay you should describe the drawing brieflyexplain its intended meaning,give your comments 做题点 1.使用三段式,第一段:图片内容;第二段:图片暗示;第三段:写自己的评论 2.描述图片…

Spring Cloud 系列之 Nacos 配置中心

目录一、Nacos简介二、Nacos安装及配置1、环境准备2、安装包下载(1)源码方式(2)发行包方式3、启动Nacos服务4、Nacos数据库配置(1)MySQL数据源(2)初始化 MySQL 数据库(3&…

C++primer第八章 IO库 8.2 文件输入输出

8.2文件输入输出 头文件fstream定义了三个类型来支持文件IO:ifstream从一个给定文件读取数据,ofstream向一个给定文件写入数据,以及fstream可以读写给定文件。在17.5.3节中(第676页)我们将介绍如何对同一个文件流既读…

codeforces 112A-C语言解题报告

112A题目网址 题目解析 1.输入两行字符串,不区分大小写地使用字典序去比较大小 A<B -1 A>B 1 AB 0 举例: 输入 abcdefg AbCdEfF 输出 1 2.字典序:在遇到第一个不同的字符时,比较的大小,就是字符串的大小 列举法: 1.列出所有情况 1)a[i]是大写,b[i]是小写 a[i]转换为小…