数据结构和算法概述 javascript

简介: 很多时候,我们无法仅使用简单的数字、字符串、布尔就能完整的描述数据,可能我们希望使用数组、对象、或它们组合而成的复合结构来对数据进行描述。这种复合的结构就是数据结构。而在实际开发中,我们会发现很多场景中使用的数据结构有着相似的特征,于是,数据结构这门学科,就把这些相似的结构单独提取出来进行研究。

数据结构和算法概述


什么是数据结构?


存储和运算是程序的两大基础功能,数据结构是专门研究数据存储的学科。


很多时候,我们无法仅使用简单的数字、字符串、布尔就能完整的描述数据,可能我们希望使用数组、对象、或它们组合而成的复合结构来对数据进行描述。这种复合的结构就是数据结构。


而在实际开发中,我们会发现很多场景中使用的数据结构有着相似的特征,于是,数据结构这门学科,就把这些相似的结构单独提取出来进行研究。


在这门学科中,常见的数据结构有:


数组、链表、树、图等


什么是算法?


存储和运算是程序的两大基础功能,算法是专门研究运算过程的学科。


一个程序,很多时候都需要根据一种已知数据,通过计算,得到另一个未知数据,这个运算过程使用的方法,就是算法。


而在很多的场景中,它们使用的算法有一些共通的特点,于是把这些共通的算法抽象出来,就行了常见算法。


从一个更高的角度来对算法划分,常见的算法有:


穷举法、分治法、贪心算法、动态规划


数据结构和算法有什么关系?


一个面向的是存储,一个面向的是运算,它们共同构成了计算机程序的两个重要部分。


有了相应的数据结构,免不了对这种数据结构的各种变化进行运算,所以,很多时候,某种数据结构都会自然而然的搭配不少算法。


数据结构和算法课程使用什么计算机语言?


数据结构和算法属于计算机基础课程,它们和具体的语言无关,用任何语言都可以实现。


下面采用JavaScript语言。


线性结构


线性结构是数据结构中的一种分类,用于表示一系列的元素形成的有序集合。


常见的线性结构包括:


数组、链表、栈、队列


数组


特别注意:这里所说的数组是数据结构中的数组,和JS中的数组不一样


数组是一整块连续的内存空间,它由固定数量的元素组成,数组具有以下基本特征:


整个数组占用的内存空间是连续的 数组中元素的数量是固定的(不可增加也不可减少),创建数组时就必须指定其长度

每个元素占用的内存大小是完全一样的


20200506130829306.png


*根据数组的基本特征,我们可以推导出数组具有以下特点: *


1.通过下标寻找对应的元素效率极高,因此遍历速度快


2.无法添加和删除数据,虽然可以通过某种算法完成类似操作,但会增加额外的内存开销或时间开销


3.如果数组需要的空间很大,可能一时无法找到足够大的连续内存 JS中的数组


在ES6之前,JS没有真正意义的数组,所谓的Array,实际上底层实现是链表。


ES6之后,出现真正的数组(类型化数组),但是由于只能存储数字,因此功能有限


目前来讲,JS语言只具备不完善的数组(类型化数组)


链表


为弥补数组的缺陷而出现的一种数据结构,它具有以下基本特征:


每个元素除了存储数据,需要有额外的内存存储一个引用(地址),来指向下一个元素 每个元素占用的内存空间并不要求是连续的

往往使用链表的第一个节点(根节点)来代表整个链表


20200506130855485.png


根据链表的基本特征,我们可以推导出它具有以下特点:


长度是可变的,随时可以增加和删除元素 插入和删除元素的效率极高 由于要存储下一个元素的地址,会增加额外的内存开销


通过下标查询链表中的某个节点,效率很低,因此链表的下标遍历效率低


手动用代码实现链表


实际上,很多语言本身已经实现了链表(如JS中的数组,底层就是用链表实现的),但链表作为一种基础的数据结构,通过手写代码实现链表,不仅可以锻炼程序思维和代码转换能力,对于后序的复杂数据结构的学习也是非常有帮助的。


因此,手写链表是学习数据结构和算法的一门基本功


手写一个链表结构,并完成一些链表的相关函数,要实现以下功能:


1.遍历打印

2.获取链表的长度

3.通过下标获取链表中的某个数据

4.通过下标设置链表中的某个数据

5.在链表某一个节点之后加入一个新节点

6.在链表末尾加入一个新节点

7.删除一个链表节点

8.链表倒序

相关文章
|
2月前
|
算法 数据处理 C语言
C语言中的位运算技巧,涵盖基本概念、应用场景、实用技巧及示例代码,并讨论了位运算的性能优势及其与其他数据结构和算法的结合
本文深入解析了C语言中的位运算技巧,涵盖基本概念、应用场景、实用技巧及示例代码,并讨论了位运算的性能优势及其与其他数据结构和算法的结合,旨在帮助读者掌握这一高效的数据处理方法。
69 1
|
2月前
|
机器学习/深度学习 算法 数据挖掘
K-means聚类算法是机器学习中常用的一种聚类方法,通过将数据集划分为K个簇来简化数据结构
K-means聚类算法是机器学习中常用的一种聚类方法,通过将数据集划分为K个簇来简化数据结构。本文介绍了K-means算法的基本原理,包括初始化、数据点分配与簇中心更新等步骤,以及如何在Python中实现该算法,最后讨论了其优缺点及应用场景。
165 4
|
1天前
|
JavaScript 算法 安全
深度剖析:共享文件怎么设置密码和权限的 Node.js 进阶算法
在数字化时代,共享文件的安全性至关重要。本文聚焦Node.js环境,介绍如何通过JavaScript对象字面量构建数据结构管理文件安全信息,包括使用`bcryptjs`库加密密码和权限校验算法,确保高效且安全的文件共享。通过实例代码展示加密与权限验证过程,帮助各行业实现严格的信息资产管理与协作。
|
17天前
|
存储 监控 算法
局域网网络管控里 Node.js 红黑树算法的绝妙运用
在数字化办公中,局域网网络管控至关重要。红黑树作为一种自平衡二叉搜索树,凭借其高效的数据管理和平衡机制,在局域网设备状态管理中大放异彩。通过Node.js实现红黑树算法,可快速插入、查找和更新设备信息(如IP地址、带宽等),确保网络管理员实时监控和优化网络资源,提升局域网的稳定性和安全性。未来,随着技术融合,红黑树将在网络管控中持续进化,助力构建高效、安全的局域网络生态。
40 9
|
14天前
|
存储 算法 测试技术
【C++数据结构——树】二叉树的遍历算法(头歌教学实验平台习题) 【合集】
本任务旨在实现二叉树的遍历,包括先序、中序、后序和层次遍历。首先介绍了二叉树的基本概念与结构定义,并通过C++代码示例展示了如何定义二叉树节点及构建二叉树。接着详细讲解了四种遍历方法的递归实现逻辑,以及层次遍历中队列的应用。最后提供了测试用例和预期输出,确保代码正确性。通过这些内容,帮助读者理解并掌握二叉树遍历的核心思想与实现技巧。
38 2
|
1月前
|
存储 运维 监控
探索局域网电脑监控软件:Python算法与数据结构的巧妙结合
在数字化时代,局域网电脑监控软件成为企业管理和IT运维的重要工具,确保数据安全和网络稳定。本文探讨其背后的关键技术——Python中的算法与数据结构,如字典用于高效存储设备信息,以及数据收集、异常检测和聚合算法提升监控效率。通过Python代码示例,展示了如何实现基本监控功能,帮助读者理解其工作原理并激发技术兴趣。
57 20
|
23天前
|
监控 算法 JavaScript
基于 Node.js Socket 算法搭建局域网屏幕监控系统
在数字化办公环境中,局域网屏幕监控系统至关重要。基于Node.js的Socket算法实现高效、稳定的实时屏幕数据传输,助力企业保障信息安全、监督工作状态和远程技术支持。通过Socket建立监控端与被监控端的数据桥梁,确保实时画面呈现。实际部署需合理分配带宽并加密传输,确保信息安全。企业在使用时应权衡利弊,遵循法规,保障员工权益。
37 7
|
21天前
|
存储 监控 JavaScript
深度探秘:运用 Node.js 哈希表算法剖析员工工作时间玩游戏现象
在现代企业运营中,确保员工工作时间高效专注至关重要。为应对员工工作时间玩游戏的问题,本文聚焦Node.js环境下的哈希表算法,展示其如何通过快速查找和高效记录员工游戏行为,帮助企业精准监测与分析,遏制此类现象。哈希表以IP地址等为键,存储游戏网址、时长等信息,结合冲突处理与动态更新机制,确保数据完整性和时效性,助力企业管理层优化工作效率。
29 3
|
2月前
|
存储 算法 搜索推荐
Python 中数据结构和算法的关系
数据结构是算法的载体,算法是对数据结构的操作和运用。它们共同构成了计算机程序的核心,对于提高程序的质量和性能具有至关重要的作用
|
2月前
|
数据采集 存储 算法
Python 中的数据结构和算法优化策略
Python中的数据结构和算法如何进行优化?

热门文章

最新文章