《数据结构与算法JavaScript描述》列表(学习笔记C03)

手把手教你用 JavaScript 实现常见数据结构与算法 你是否遇到过这样的场景?写前端代码时想优化列表渲染性能,却不知道用链表还是数组更高效;面试时被问“用 JS 实现一个栈”,结果卡壳在 API 设计;想自己写个小框架,却对虚拟 DOM 的树结构遍历一头雾水?本文正是为解决这些问题而生:覆盖6 类核心数据结构(数组、链表、栈、队列、树、图)和5 大经典算法(排序、搜索、递归、动态规划、贪心),用 JS 代码+生活案例,让你“既能写代码,又懂为什么这么写”。本文从“生活场景”切入,先讲数据结构(像认识工具),再讲算法(像学习工具的用法),最后用实战案例串联。 阅读详情

相关概念

1.列表是一组有序的数据。
2.每个列表中的数据项称为元素。
3.在 JavaScript 中,列表中的元素可以是任意数据类型。
4.列表中可以保存多少元素并没有事先限定,实际使用时元素的数量受到程序内存的限制。
5.不包含任何元素的列表称为空列表。
6.列表中包含元素的个数称为列表的 length。
7.底层储存数据的数据结构是数组。

代码

// 实现列表类
function List() {
    this.listSize = 0 // 列表元素个数
    this.pos = 0 // 列表的当前位置
    this.dataStore = [] // 初始化一个空数组来保存列表元素
    this.clear = clear // 清空列表所有元素
    this.find = find // 
    this.toString = toString // 返回列表的字符串形式       **返回值**
    this.insert = insert // 在现有元素后插入新元素
    this.append = append // 在列表末尾添加新元素
    this.remove = remove // 从列表中删除元素
    this.front = front // 
    this.end = end
    this.prev = prev // 讲当前位置后移一位
    this.next = next // 将当前位置前移一位
    this.length = length // 返回列表元素个数                **返回值**
    this.currPos = currPos // 返回列表的当前位置            **返回值**
    this.moveTo = moveTo // 将当前位置移动到指定位置
    this.getElement = getElement // 返回当前位置的元素      **返回值**
    this.length = length
    this.contains = contains
}

// append
// 在列表末尾添加element元素
function append (element) {
    this.dataStore[this.listSize++] = element
}

// find
// 找到element元素返回位置i否则返回-1
function find(element) {
    for (var i=0; i<this.dataStore.length; ++i) {
        if (this.dataStore[i] == element) {
            return i
        }
    }
    return -1
}

// remove
// 删除element圆度 并更改列表长度 最后返回删除成功与否的布尔值
function remove (element) {
    var foundAt = this.find(element)
    if (foundAt > -1) {
        this.dataStore.splice(foundAt, 1)
        --this.listSize
        return true
    }
    return false
}

// length
// 返回列表的长度
function length () {
    return this.listSize
}

// toString
// 直接返回字符串形式
function toString () {
    return this.dataStore
}

// 测试代码一
var names = new List()
names.append('xx1')
names.append('xx2')
names.append('xx3')
console.log('第一个列表',names.toString()) // [xx1,xx2,xx3]
names.remove('xx2')
console.log( '第二个列表', names.toString()) // [xx1,xx3]

// insert
// 插入element元素至after后面 成功返回true 失败返回false
function insert (element, after) {
    var insertPos = this.find(after)
    if (insertPos > -1) {
        this.dataStore.splice(insertPos+1, 0, element)
        ++this.listSize
        return true
    }
    return false
}

// clear
// 清除元素 并将列表长度和当前位置设为0
function clear () {
    delete this.dataStore
    this.dataStore = []
    this.listSize = this.pos = 0
}

// contains
// 如果列表中包含该元素则返回true 否则返回false
function contains (element) {
    for (var i=0; i<this.dataStore.length; ++i) {
        if (this.dataStore[i] == element) {
            return true
        }
    }
    return false
}

// 遍历列表 控制位置的一些函数
function front () {
    this.pos = 0
}
function end () {
    this.pos = this.listSize-1
}
function prev () {
    if (this.pos > 0) {
        --this.pos
    }
}
function next () {
    if (this.pos < this.listSize-1) {
        ++this.pos
    }
}
function currPos () {
    return this.pos
}
function moveTo (position) {
    this.pos = position
}
function getElement () {
    return this.dataStore[this.pos]
}

// 测试代码二
var names2 = new List()
names2.append('xx4')
names2.append('xx5')
names2.append('xx6')
names2.append('xx7')

names2.front()
console.log('front', names2.getElement()) // xx4

names2.next()
console.log('next', names2.getElement()) // xx5

names2.next()
names2.next()
names2.prev()
console.log('prev',names2.getElement()) // xx6

// 使用迭代器遍历列表(从前向后)
for(names2.front(); names2.currPos() < names2.length; names2.next()) {
    console.log('for1', names2.getElement())
}
// 使用迭代器遍历列表(从后向前)
for(names2.end(); names2.currPos() >= 0; names2.prev()) {
    console.log('for2', names2.getElement())
}

// 读取文件
function createArr(file) {
    // 以换行符分隔为数组
    var arr = read(file).split('\n')
    for(var i=0; i<arr.length; ++i){
        // 数组的每一项去空格
        arr[i] = arr[i].trim()
    }
    return arr
}

// 实例:使用列表管理影碟租赁
// 将数组movies保存到movieList数组中
var movieList = new List()
for(var i=0; i<movies.length; ++i){
    movieList.append(movies[i])
}

// 显示列表(原生数据类型)
function displayList(list) {
    for(list.front(); list.currPos() < list.length; list.next()) {
        console.log(list.getElement())
    }
}

// 显示列表(自定义类型)
function displayList(list) {
    for(list.front(); list.currPos() < list.length(); list.next()){
        if (list.getElement() instanceof Customer) {
            console.log(list.getElement()['name'] + ', ' + list.getElement()['movie'])
        } else {
            console.log(list.getElement())
        }
    }
}

// 创建客户列表
var customers = new List()

// customer对象的构造函数
function Customer(name, movie) {
    this.name = name
    this.movie = movie
}

// 客户检出电影的函数
function checkOut(name, movie, filmList, customerList) {
    if (movieList.contains(movie)) {
        var c = new Customer(name, movie)
        customerList.append(c)
        filmList.remove(movie)
    } else {
        console.log(movie + 'is not available.')
    }
}
2024年最全数据结构与算法:终于可以用三种语言(C,C#,JavaScript,斩获offer 队列在C语言上只能自己构造,好在我们前面有链表、有顺序表,我们可以复制过来一个链表程序构造一个队列,于是从链表程序中复制过来b5.c或者b6.c即可,我们分析队列的ADT可知,最需要的队列功能需求是:修改的这个链表结点函数、仅仅加了第14行,在过去,所以结点删除后,最后的尾巴结点指针Tail所指的存储空间被释放,导致这个指针变量不可用,现在在结点个数为0的情况下,再次让尾结点指向头结点,保证下次进入链表的数据依然正确。补充main()函数,测试多批次进入队列、出队列,全部程序见B0.c。 阅读详情

相关推荐

ESP32-S3 + TB6600驱动42步进电机:从基础接线到AccelStepper库平滑加减速实战

本文详细介绍了如何使用ESP32-S3开发板和TB6600驱动器控制42步进电机,从基础接线到利用AccelStepper库实现平滑加减速控制。内容涵盖硬件连接、基础驱动代码、AccelStepper库的安装与参数调优,以及高级技巧与故障排除,帮助创客实现工业级精准控制。

weixin_42632434的博客 284

数据结构与算法书籍推荐

学习数据结构与算法,还是很有必要看几本相关的书籍,但根据不同基础的人,合适看的书也不一样,因此,针对不同层次、不同语言的人,推荐几本市面上口碑不错的书。 1. 入门级 针对刚入门的同学,建议不要急着去看那些经典书,像《算法导论》、《算法》这些比较经典、权威的书。虽然书很好,但看起来很费劲,如果看不完,效果会很不好。所以建议先看两本入门级的趣味书: 《大话数据结构》 《算法图解》 大话数据结构 ...

张许平的博客 7万+

Android SSL证书固定实战:原理、方案与避坑指南

SSL/TLS协议是保障网络通信安全的基石,其核心原理是通过非对称加密和数字证书实现身份认证与数据加密。在移动应用开发中,为了防止中间人攻击,证书固定技术应运而生,它通过将服务器证书或公钥的哈希值预置在应用内,强制校验服务器身份,从而大幅提升通信链路的安全性。这一技术对于金融、电商等高安全要求场景尤为重要。本文聚焦Android平台,深入解析SPKI固定、Network Security Configuration与OkHttp CertificatePinner等主流方案,并针对证书更新、调试兼容等常见痛

weixin_33935636的博客 403

资料分享:送你一本《数据结构与算法JavaScript描述》电子书!

数据结构 是掌握计算机编程必须具备的技能。通常情况下,我想掌握一门编程语言所用的方法就是利用这门语言把数据结构中线性表、栈、队列、字符串、动态数字、整数集合、树、图、搜索、排序等涉及的算法全部写一遍。写完之后,基本上就把这门语言搞定了。 今天给大家分享的就是我从网上找到的利用 JavaScript 语言来实现各种数据结构的算法,希望这本电子书对学习 JavaScript 想从事前端工作的读者有益。...

老马的程序人生 4380

【eNSP 华为模拟器】单臂路由实战:从原理到配置全解析

本文详细解析了单臂路由技术,通过华为eNSP模拟器从原理到配置进行实战教学。文章阐述了单臂路由如何利用路由器单物理接口创建多个子接口,实现不同VLAN间通信,并提供了完整的操作步骤、配置命令及排错方法,帮助网络工程师掌握这一经典网络技术。

698

DELL SC存储扩容避坑指南:6Gb vs 12Gb扩展柜混插的真相

本文深入解析DELL SC存储扩容中6Gb与12Gb扩展柜混插的核心规则与性能影响。文章指出,从SCOS 7.3版本起允许混插,但整个SAS环路速率将降至最低设备水平,尤其在12Gb控制器上接入6Gb扩展柜会严重拖累性能。指南提供了清晰的兼容性矩阵、实战操作流程及关键避坑清单,帮助管理员安全、高效地完成存储扩容。

weixin_28314575的博客 459

Javascript描述-数据结构与算法

☆     数据结构是以某种形式将数据组织在一起的集合,它不仅存储数据,还支持访问和处理数据的操作。算法是为求解一个问题需要遵循的、被清楚指定的简单指令的集合。      下面是我总结整理出的关于数据结构与算法的相关内容,如有错误,欢迎交流。本文中对于方法的封装均采用JavaScript语言来实现。...

weixin_43689100的博客 402

高分辨率航拍图像的目标检测切图优化策略

本文深入探讨了高分辨率航拍图像目标检测中的切图优化策略。针对大尺寸图像直接缩放导致小目标信息丢失的问题,文章详细阐述了基于重叠切割的核心方法,包括如何根据目标尺寸确定切图尺寸与重叠率,并提供了从切图到坐标还原的完整代码实现与避坑指南,有效提升检测精度与效率。

xk7n92h3p5m的博客 1113

【数据结构与算法学习笔记】

本系列文章为作者学习数据结构与算法所作笔记,笔记参考陈斌老师的课程“数据结构与算法 Python版”和经典的数据结构教材《数据结构(C语言版)》(作者:严蔚敏),后期也参考了LetCode的题解。

floating_heart的博客 3101

pandas教程:2012 Federal Election Commission Database 2012联邦选举委员会数据库

里面包含了支持者的名字,职业和雇主,地址,赞助金额。我们可以已经能想到如何切割、整理数据,来提取赞助者的统计数据,或提取宣传活动的模式,这里我们展示一些不同的分析方法。可以看到有些职业是同一种工作类型,指代的是同一个东西。这两个连续操作是分别独立执行的,一个结束后,另一个才开始。上,这里我是把数据集压缩成了ZIP格式,解压后能正常导入)。我觉得也有必要好好了解一下,这个网站做了很好的讲解,),所以我们最好添加这样的信息。这样的情况,即把两个索引操作连在一起。,发现映射关系被正常执行了,所以这里的。

Cachel Wood的博客 349

字符串尾部空格的迷思:深入解析 ABAP 隐式转换规则与 `strlen` 意外结果

看似简单的strlen之谜,背后实则是 ABAP 隐式转换的一整套严谨规则。只要开发者在赋值、输出、接口映射等关键节点建立“尾部空格意识”,辅以CONVCONDENSE等显式手段,就能有效杜绝多余空格引发的链式故障。希望本文的拆解与案例,能让你在面对下一个“异常长度”时,从容而笃定地给出正确答案。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 431

【数据结构与算法】多种语言(VB、C、C#、JavaScript)系列数据结构算法经典案例教程合集目录

文章目录1. 专栏简介2. 专栏地址3. 专栏目录 1. 专栏简介 2. 专栏地址 「 刘一哥与GIS的故事 」之《数据结构与算法》 3. 专栏目录 【经典回放】多种语言系列数据结构算法:二叉树(JavaScript版) 【经典回放】多种语言系列数据结构算法:二叉树(C#版) 【经典回放】多种语言系列数据结构算法:树(C#、JavaScript、VB6版) 【经典回放】多种语言系列数据结构线性表之一:顺序表 【经典回放】多种语言系列数据结构线性表之二:链表 【经典回放】多种语言系列数据结构算法:串(C

智慧空间实验室 814

2023年全国职业院校技能大赛网络系统管理赛项模块A:网络构建(样题4)-网络部分解析-附详细代码

2023年全国职业院校技能大赛网络系统管理赛项模块A:网络构建(样题4)-网络部分解析-附详细代码

bfq05234214的博客 441

《数据结构与算法JavaScript描述》队列(学习笔记C05)

队列相关概念代码 相关概念 队列是一种列表,不同的是队列只能在队尾插入元素,在队首删除元素。 队列是一种先进先出(First-In-First-Out,FIFO)的数据结构。 入队操作在队尾插入新元素,出队操作删除队头的元素。 peek()读取队头的元素。 代码 // 队列--先进先出--FIFO // 常规操作: // 入队 // 出队 // 返回队头元素 peek() // length // clear() // 底层实现结构--数组 // 数组: push() 末尾添加元素 // 数组: shi

yuhong's blog 240

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

Javascript数据结构与算法

文章目录Javascript数据结构与算法什么是数据结构与算法线性结构数组数组使用的API链表链表原理自定义链表双向链表栈自定义栈栈常见的操作栈的封装栈的应用十进制转二进制队列自定义队列队列常见的操作队列的封装优先级队列队列的应用哈希表哈希表理论认识哈希表认识哈希化地址的冲突哈希表效率自定义哈希表哈希函数哈希表实现哈希扩容树结构树相关的概念树的基本概念二叉树的概念二叉搜索树图结构排序&搜索...

MOOG007的博客 368

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

《数据结构与算法JavaScript描述》散列(学习笔记C08)

散列相关概念代码未完待续P94 相关概念 1.散列是一种常用的数据存储技术,散列后的数据可以快速地插入或取用。 2.散列使用的数据结构叫做散列表。 3.在散列表上插入、删除和取用数据都非常快,但是对于查找操作来说却效率低下。 4.我们的散列表是基于数组进行设计的。 5.使用散列表存储数据时,通过一个散列函数将键映射为一个数字,这个数字的范围是 0 到散列表的长度。 代码 // 散列 // 数组的长度需要是质数 // HashTable类(表示散列表) function HashTable() {

yuhong's blog 348

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

《数据结构与算法JavaScript描述》图和图算法(学习笔记C11)

图和图算法相关概念代码未完待续 相关概念 1.图由边的集合及顶点的集合组成。 2.顶点也有权重,也称为成本。 3.如果一个图的顶点对是有序的,则可以称之为有向图。有向图表明了顶点的流向。 4. 如果图是无序的,则称之为无序图,或无向图。 5.图中的一系列顶点构成路径,路径中所有的顶点都由边连接。 6.路径的长度用路径中第一个顶点到最后一个顶点之间边的数量表示。 7.由指向自身的顶点组成的路径称为环,环的长度为 0。 8.圈是至少有一条边的路径,且路径的第一个顶点和最后一个顶点相同。 9.无论是有向图还是无

yuhong's blog 440

JavaScript 数据结构与算法之美 - 强烈推荐 GitHub 上值得前端学习的数据结构与算法项目

前言 算法为王。 想学好前端,先练好内功,内功不行,就算招式练的再花哨,终究成不了高手;只有内功深厚者,前端之路才会走得更远。 强烈推荐 GitHub 上值得前端学习的数据结构与算法项目,包含 gif 图的演示过程与视频讲解。 GitHub 项目 数据结构与算法 关于数据结构与算法的 GitHub 项目,star 数由高到低排序。 javascript-algorithms(...

嘿嘿 1224

JavaScript中有关数据结构和算法的最佳书籍

If you're trying to learn about data structures or algorithms, you're in luck - there are a lot of resources out there. 如果您想了解数据结构或算法,那么您很幸运-那里有很多资源。 Here are a few book recommendations - along with ...

cumi6497的博客 1929

【实战】JavaScript版数据结构与算法 —— 课程导学

文章目录一、前端刚需二、快速入门三、课程内容介绍四、课程特色五、适用对象六、注意事项 JavaScript版数据结构与算法-慕课网实战 一、前端刚需 前端开发门槛低、人员参差不齐 前端开发只会写页面,不懂算法,伪程序员 面试考算法,通过率极低 看过C、C++、Java版算法,JavaScript版的却不会写 程序 = 算法 + 数据结构 二、快速入门 通过“解题”夯实基础算法 理解算...

程序边界 1043

JavaScript数据结构与算法启蒙

JavaScript数据结构与算法启蒙

随便写写 601

《数据结构与算法JavaScript描述》字典(学习笔记C07)

字典相关概念代码 相关概念 1.字典是一种以键 - 值对形式存储数据的数据结构。 2.JavaScript 的 Object 类就是以字典的形式设计的。 代码 // 字典 // 以Array类为基础实现Dictionary类 // 定义Dictionary类 function Dictonary() { this.datastore = new Array() this.add = add this.find = find this.remove = remove

yuhong's blog 250

JavaScript实现数据结构与算法(二)线性结构

JavaScript实现数据结构与算法(二)线性结构 目录 1. 重要性 2. 线性结构【本文】 3. 哈希表 4. 树结构 5. 图结构 6. 排序和搜索 2. 线性结构 2.1 数组的特点 2.1.1 普通数组 优点:通过下标取元素效率非常高。 缺点:常见语言数组不能存放不同类型的数据,所以一般都先封装一个Object类型 2.1.2 底层数组 扩容方法:新建一个大的数组,把原有数组写进去,再...

weixin_43545225的博客 1700

JavaScript数据结构与算法

七、树 八、图 九、遍历算法 十、排序算法

weixin_50786692的博客 422

《数据结构与算法JavaScript描述》栈(学习笔记C04)

栈相关概念代码力扣相关题目 相关概念 1.栈是一种特殊的列表,栈内的元素只能通过列表的一端访问,这一端称为栈顶。 2.栈被称为一种后入先出(LIFO,last-in-first-out)的数据结构。 3.入栈使用 push() 方法,出栈使用 pop() 方法,peek() 方法则只返回栈顶元素(预览栈顶元素不删除)。 代码 // 栈的实现 // 常规操作: // 压入栈 push() // 弹出栈 pop() // 预览栈顶 peek() // 顶元素位置 变量 top // 清除栈内所有元素 cl

yuhong's blog 170

《数据结构与算法JavaScript描述》链表(学习笔记C06)

链表相关概念代码力扣相关题目 相关概念 1.如果你发现数组在实际使用时很慢,就可以考虑使用链表来替代它。 因为,JavaScript 中数组的主要问题是,它们被实现成了对象,与其他语言(比如 C++ 和 Java)的数组相比,效率很低 2.链表是由一组节点组成的集合。 3.每个节点都使用一个对象的引用指向它的后继。 4.指向另一个节点的引用叫做链。 5.数组元素靠它们的位置进行引用,链表元素则是靠相互之间的关系进行引用。 代码 // 1.基础链表 // Node类表示节点 // LinkedList类

yuhong's blog 235
上一篇: 《JavaScript高级程序设计》HTML5 脚本编程(学习笔记C16)
下一篇: 《数据结构与算法JavaScript描述》栈(学习笔记C04)
magic-fish
博客等级 码龄9年 3粉丝 25原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值