首页 > 其他分享 >数据结构小结

数据结构小结

时间:2023-06-05 19:55:36浏览次数:33  
标签:index arr right 算法 数据结构 小结 left

个人认为数据结构有点偏向理论知识点,从这些理论知识点,我们可以知道各种数据结构的特点,然后在特定的场景下使用对应的数据结构来存储。

基础的数据结构

从逻辑上来说基础的数据结构只有线性结构、非线性结构,也就是数组、链表。其他复杂一点的如队列、栈、树、图、hash table 都可以通过数组和链表的方式来存储。

有了数组、链表为什么还要有其他数据结构?

我的理解是出现队列、栈、树、图等数据结构的原因,是为了解决,部分问题处理过程中时间复杂度过高的问题,如我们在数组中如果想要更快的访问到先push 进去的数据,那么我们直接用队列即可。

数据结构与算法

我们通常说的数据结构是逻辑上数据与数据相互之间存在一种或多种关系的数据元素集合

算法是解决某种具体问题的方法、步骤

数据结构是静态的,它只是组织数据的一种方式,如果不在它的基础上操作、构建算法,孤立存在的数据结构就是没用的、也没有意义。

数据结构和算法是相辅相成的。数据结构是为算法服务的,算法要作用在特定的数据结构之上。

如当我们把数据存入数组中,有个需求我们需要把按照小到大排序展现出来,我们可以一个一个的比较(冒泡排序)。但是当数据量很大的时候,这种方法就很低效了,这个时候我们可以使用快排这样的算法。

常用算法思想

前面说算法是作用在特定的数据结构之上,在大部分的时候我们都是使用别人总结出来的一些方法、思想如:

  • 二分法
  • 双指针
  • 滑动窗口
  • 递归
  • 动态规划
  • 贪心算法
  • 回溯算法
  • 穷举法也叫枚举法

常见排序

排序是一个很常见的需求,我们可以通过冒泡、或者快排来解决。

冒泡:

const bubbleSort = (arr) => {
  if (arr.length <= 1) return
  for (let i = 0; i < arr.length; i++) {
      let hasChange = false
      for (let j = 0; j < arr.length - i - 1; j++) {
          if (arr[j] > arr[j + 1]) {
              const temp = arr[j]
              arr[j] = arr[j + 1]
              arr[j + 1] = temp
              hasChange = true
          }
      }
      // 如果false 说明所有元素已经到位
      if (!hasChange) break
  }
  console.log(arr)
}

递归版快排:

function quickSort (arr) {
  if (arr.length < 2) return arr
  let pivot = arr[0]
  let left = arr.slice(1).filter(t => t <= pivot)
  let right = arr.slice(1).filter(t => t > pivot)
  return [...quickSort(left), pivot, ...quickSort(right)]
}

递归的层级过多有可能造成内存泄露的风险,下面是优化之后的,在原数组中移动的快速排序。

原数组移动快排:

function quickSort2 (arr, left, right) {
  if (left < right) {
    let index = partition(arr, left ,right)
    // index 已经是正确的位置
    quickSort2(arr, left, index - 1)
    quickSort2(arr, index + 1, right)
  }
  return arr
}

// 分区:把基准值插入到正确的位置
function partition (arr, left, right) {
  let pivot = arr[left]
  let index = left + 1 // 待交换位置为左边+1

  // 左 ---> 右扫描
  for (let i = index; i <= right; i++) {
    // 小 ---->  大  小于放左边
    if (arr[i] <= pivot) {
      swap(arr, index, i)
      index++
    }
  }
  // 最后把基准值插入到合适的位置
  swap(arr, left, index -1 )
  return index - 1;
}

function swap (arr, i, j) {
  [arr[i], arr[j]] = [arr[j], arr[i]]
}

let list = [66,1,434,545,65,0,2,3,6,66,999,-1,22]
let arr = quickSort2(list,0,list.length)
console.log(arr)

还有很多的排序如插入排序、归并排序等可以自行了解。

总结

 数据结构、设计模式、网络这些还是挺重要的。

路漫漫其修远兮,吾将上下而求索。

标签:index,arr,right,算法,数据结构,小结,left
From: https://www.cnblogs.com/longbensong/p/17458793.html

相关文章

  • 数据结构第一天
    数据>数据元素>数据项 数据项是构成数据元素的不可分割的最小单位 数据是由数据项组成的,数据项是由数据元素组成的 数据元素-----组成数据的基本单位与数据的关系:是集合的个体 数据对象------性质相同的数据元素的集合与数据的关系:是集合的子集  数据元素......
  • C#数据结构-红黑树实现
    参考网址: https://zhuanlan.zhihu.com/p/353948322二叉查找树,他对于大多数情况下的查找和插入在效率上来说是没有问题的,但是他在最差的情况下效率比较低。红黑树保证在最坏的情况下插入和查找效率都能保证在对数的时间复杂度内完成。红黑树的性质:性质1.节点是红色或黑色性质2.根是......
  • 交换机VXLAN知识小结
    VXLAN(VirtualeXtensibleLocalAreaNetwork,虚拟扩展局域网),是由IETF定义的NVO3(NetworkVirtualizationoverLayer3)标准技术之一,是对传统VLAN协议的一种扩展。VXLAN的特点是将L2的以太帧封装到UDP报文(即L2overL4)中,并在L3网络中传输。VXLAN本质上是一种隧道技术,在源网络设备与......
  • 数据结构--Dijkstra算法最清楚的讲解
    迪杰斯特拉(Dijkstra)算法是典型最短路径算法,用于计算一个节点到其他节点的最短路径。它的主要特点是以起始点为中心向外层层扩展(广度优先搜索思想),直到扩展到终点为止###基本思想通过Dijkstra计算图G中的最短路径时,需要指定起点s(即从顶点s开始计算)。此外,引进两个集合S和U。S的......
  • 交换机堆叠知识小结
    堆叠是指将多台支持堆叠特性的交换机通过堆叠线缆连接在一起,从逻辑上虚拟成一台交换设备,作为一个整体参与数据转发。堆叠是目前广泛应用的一种横向虚拟化技术,具有提高可靠性、扩展端口数量、增大带宽、简化组网等作用堆叠系统中所有的单台交换机都称为成员交换机,按照功能不同,可以......
  • [学习笔记]数据结构_线性表_顺序表and单链表
    线性表线性表是一种逻辑结构,表示元素之间一对一的相邻关系。顺序表和链表是指存储结构,两者属于不同层面上的概念。线性表的基本操作boolInitList(&L)//初始化表,构造一个空的线性表intLength(L)//求表长。返回线性表L的长度,即L中数据元素的个数intLocateElem(L,e)//按......
  • R数据结构-列表
    列表(List)是一种数据结构,它可以包含不同类型的对象,包括向量、矩阵、数据框、函数等。列表允许您将多个对象组合到一个结构中,以便以统一的方式进行处理和访问#创建一个包含向量、矩阵和数据框的列表vec<-c(1,2,3)mat<-matrix(1:9,nrow=3)df<-data.frame(x=c(1,2......
  • 《数据结构》之栈和堆结构及JVM简析
    导言:在数据结构中,我们第一了解到了栈或堆栈,它的结构特点是什么呢?先进后出,它的特点有什么用呢?我们在哪里可以使用到栈结构,栈结构那么简单,使用这么久了为什么不用其它结构替代?一.程序在内存中的分布作为一个程序猿,我们应该会常常跟代码打交道,那么我们所编写的程序或代码,是怎么跑......
  • C/C++数据结构设计题[2023-06-04]
    C/C++数据结构设计题[2023-06-04]停车场模拟管理程序的设计与实现1.设计目的理解线性表的逻辑结构和存储结构,进一步提高使用理论知识指导解决实际问题的能力。2.问题描述设停车场只有一个可停放几辆汽车的狭长通道,只有一个大门可供汽车进出。汽车在停车场内按车辆到达的先后顺......
  • 数据结构(I)
    1链表1.1单链表模板:AcWing826.单链表题目:实现一个单链表,实现以下\(3\)种操作:Hx向链表头插入一个数\(x\);Dx删除第\(x\)个插入的数(若\(x=0\),表示删除头结点);Ikx在第\(k\)个插入的数后插入一个数\(x\)(保证\(k>0\))。给你\(m\)次操作,输出最终链表。\(1......