数据结构
划分
1.储存结构(储存对应的数据)
2.逻辑结构(逻辑的体现)
3.算法
储存结构的相关内容
线性结构(有顺序)
1.数组(顺序表)
2.线(先进后出)
3.队列(先进先出)
非线性结构(没有顺序)
1.串
2.链表(单向链表 双向链表)
3.图(有向图 无向图)
4.树(二叉树)
5.hash
所有的储存结构 必须具备增删改除的方法
数组
概述:数组是一种数据结构,它里面的存储的数据是有顺序的(又称为顺序表).
数组储存的数据一般是单一类型的数据,也可以储存多种类型
数组是一个储存数据比较简易的容器,它可以实现其他的数据结构
数组的申明(引用数据类型)
使用[]来申明
数据里面储存的数据采用,分割
使用new Array关键词申明
没有指定长度的数组 new后面的首字母要大写
数组的特性
下标 从0开始到length-1 可以通过下标来访问对应
length 长度 (数组里面的值的个数)
数组的遍历
传统for循环进行遍历
for in遍历(一般用于遍历对象)//for in来遍历 key 也就是对应数组的下标(一般用于遍历对象 不仅是遍历数组 )
for(var index in array){//index这个key在array里面
console.log(array[index])
}
for of遍历(专门遍历数组)//遍历的是值
for (var value of array){//value这个值存在于array中
console.log(value)
}
数组的操作方法
添加方法{add push save set ...}
push 添加到末尾
会改变原本的数组
会返回添加后的长度
unshift 添加到开头
数组的添加方式会返回对应新的长度
删除方法(delete 完全删除 remove 移除软删 pop移除 ...)
pop 删除最后一个
shift 删除第一个
删除方法 添加修改和删除 splice(会影响之前的数组)
返回对应的删除的元素
修改方法(update replace)
修改方式是重新赋值,数组没有修改方法
查询相关的方法(select query find search ...)
indexOf 根据对应的值查询下标(有就返回对应的下标,没有找到就返回-1)
lastIndexOf 从后往前查找 没有找到返回-1
sort排序的方法
默认按照ascii码排序
如果需要按照对应的值的大小进行排序 自定义比较方法 return a-b就是正序 return b-a就是倒叙
引用数据类型的比较,比较的是地址值({}!={})
reverse反转的方法
var arr1 = [1,2,3,4]
arr1.reverse()
console.log(arr1)
不会改变原数组的方法
join 数组转为字符串(不会影响原本的数组)
连接(合并多个数组 concat 返回一个新的数组 不会改比那原本的数组)
截取(slice sub...)
截取slice(不会影响原本的数组)
排序算法(常见的排序算法的时间复杂度O(n2))
1.冒泡排序(相邻的两个相比 交换位置) O(n2)
function(){
for(var i= 0;i<arr.length-1;i++){
for(var j = 1;j<arr.length-i;j++){
if(arr[j]<arr[j-i]){
var temp = arr[j]
arr[j] = arr[j-i]
arr[j-i] = temp
}
}
}
return arr
}
2.选择排序(选一个值 跟所有的值进行比较 然后这个值不是开始的 就换位置) O(n2)
//选择排序
function selectorSort(arr){
for(var i=0;i<arr.length-1;i++){
//将当前的i值当做最大值
var max = i
for(var j = i+1;j<arr.length;j++){
//判断当前的最大值小于j下标所在的值
if(arr[max]<arr[j]){
max = j
}
}
//判断当前的最大值不是开始设置的值 要进行位置交换
if(max != i){
var temp = arr[i]
arr[i] = arr[max]
arr[max] = temp
}
}
return arr
}
3.快速排序 (冒泡排序的进阶 二分法) O(nlogn)
function quikSort(arr){
//当我们的数组里面只有一个元素或者一个元素都没有的时候 退出返回这个数组
if(arr.length <= 1){
return arr
}
//取基数值 取第一个
var mid = arr[0]
var left = []
var right = []
//for循环 拿出所有的值跟中间值比较
for(var i=1;i<arr.length;i++){
arr[i]>=mid?right.push(arr[i]):left.push(arr[i])
}
return quikSort(left).concat([mid],quikSort(right))
}
4.插入排序
5.希尔排序(插叙的进阶)
6.堆排序
7.桶排序
8.基数排序
9.归并排序(大数据排序)
...