数据结构与算法(面试相关)

事实上,只要追逐名利的世界一天不被毁灭,只要幸福一天不变的像空气那样唾手可得,人类就一天不能停止贪心!

数据结构


   数据结构是数据元素的集合。目前有三种结构,分别是逻辑结构和物理结构。逻辑结构用来描述逻辑关系,比如数据元素一对多,多对一等;物理结构一般是指数据在计算机存储空间的存放形式,比如顺序存储结构和链式存储结构。数据的分类一般分为线性与非线性,线性相当于一对一,比如栈和队列。非线性相当于一对多或多对一,比如树结构。

   针对前端而言常用的数据结构有:栈、队列、链表、树、散列表。

   js的数据类型有:Number、String、Boolean、Function、Object、null、undefined。
栈和队列可以用数组来模拟,栈的特性是先进后出,队列的特性是先进先出。

//栈
let stack = [1,2,3,4];
//进栈
//stack.push(5)
stack.length = stack.length-1;
//队列
let queue = [1,2,3,4];
//进队列
queue[queue.length] = 5;
//出队列
//queue.unshift(1);
let i = 0;
while(i < queue.length - 1){
	queue[i] = queue[i + 1];
	i++;
}
queue.length = queue.length - 1;

在算法中对栈的运用一般都是取出栈顶元素比较,比如有效的括号:

var isValid = function(s){
	let map = {
		'{':'}',
		'(':')',
		'[':']'
	}
	let stack = [];
	for(let i=0; i < s.length; i++){
		if(map[s[i]]){
			stack.push(s[i]);
		}else if(s[i] !== map[stack.pop()]){
			return false;
		}
	}
	return stack.length === 0;
}

链表这种数据结构,查找指定元素比较费时,插入操作比较方便

function ListBode(val){
	this.val = val;//数据域
	this.next = null;//指针域
}

树是比较常考的,比如二叉树等

function TreeNode(val){
	this.val = val;//根节点
	this.left = null;//左子树
	this.right = null;//右子树
}

二叉树的中序遍历

var inorderTraversal = function(root){
	return root ?
	[
		...inorderTraversal(root.left),
		root.val,
		...inorderTraversal(root.right);
	]
	: []
};

散列表是我们最常用的数据结构,因为查找和插入操作都不费时,就好比JS中的对象,关于最常见的数据结构可以看这里
在JS判断数据类型的方法有很多种,一般最常用的就是Object.prototypc.toString.call()
对于简单的数据类型,可以通过typeof来判断。除null外,均可以返回正确的结果

let fn = function(){};
typeof fn === "function"//ture
typeof null === "object"//true

instanceof是用来判断A是否为B的实例,instanceof检测的是原型

function myInstanceof(A,B){
	const L = A.__proto__;
	const R = B.prototype;
	if(L === R) return true;
	return false;
}

判断两个对象是否相等,可以使用JSON.stringify()来判断,同样也可以判断两个数组是否相等,判断数组还可以用toString()

let a = [1,2,3,"d"]
let b = [1,2,3,"d"]
a.toString() === b.toString()//true
JSON.stringify(a) === JSON.toString(b)//true
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值