使用javascript模拟常见数据结构(一)
数据结构和算法可算是每个程序员的必备技能,而随着前端工作的深入,对于数据结构的知识真的是越来越需要掌握了。好了,于是乎最近看了《javascript数据结构和算法》,算是对于后面的使用C语言来学习数据结构进行一下预热。恩,这本书的内容倒是也不多,其实就是使用javascript来模拟数据结构,比如使用数组模拟队列和栈,使用对象模拟SET等等,好了,下面上内容。
一、数组
这个就不必多说了吧,各种编程语言里面都有的,其在内存里面连续的分布,导致其便于查询,但是不便于增删,比如你把arr是一个五项的数组,你把arr[0]去掉了,后面的四项还要往前挪一个位置。
下面说下js数组的一些常用的方法吧。数组的增加,push,unshift。数组的删除,pop,shift,当然还有splice方法。
数组的合并: concat。
数组的搜索:indexOf, lastIndexOf
数组的排序:sort(),reverse()。这里注意sort的排序,如果是字符串的话会根据ASCII 码来进行排序,可以传入函数来处理。
输出为字符串:toString(),join()
迭代器:every 有一个是false则返回false,否则返回true
some 有一个是true则返回true
forEach 迭代整个数组
map 遍历数组,返回一个新数组
reduce 累加
filter 返回符合条件的元素组成的数组
二、栈
栈是一种遵从后进先出(LIFO)原则的有序集合。新添加的或待删除的元素都保存在栈的末尾,称作栈顶,另一端就叫栈底。在栈里,新元素都靠近栈顶,旧元素都接近底。
function Stack() {
var items = [];
this.push = function(element){
items.push(element);
};
this.pop = function(){
return items.pop();
};
this.peek = function(){
return items[items.length-1];
};
this.isEmpty = function(){
return items.length == 0;
};
this.size = function(){
return items.length;
};
this.clear = function(){
items = [];
};
this.print = function(){
console.log(items.toString());
};
}
如上所示,这样就使用数组完成了一个简单的栈结构的构建。
三、队列
队列是遵循FIFO(First In First Out,先进先出,也称为先来先服务)原则的一组有序的项。队列在尾部添加新元素,并从顶部移除元素。最新添加的元素必须排在队列的末尾。
function Queue(){ var items = []; this.enqueue = function(element){
items.push(element);
} this.dequeue = function(){
return items.shift();
} this.front = function(){
return items[0];
} this.isEmpty = function(){
return items.length == 0;
} this.clear = function(){
items = [];
}; this.size = function(){
return items.length;
}; this.print = function(){
console.log(items.toString());
};
}
so,这样一个队列的模拟也完成了,OK。
最新文章
- X86上搭建交叉工具链,来给龙芯笔记本编译本地工具链(未完待续)
- WinForm------SplitContainerControl的窗体调用控件方法
- 用emacs的org2blog组件写cnblogs博客 -- 环境配置及使用
- linux服务监控脚本
- 使用ICallbackEventHandler接口更高效实现Ajax
- table+js实现网站左侧列表下拉隐藏
- Linux常用操作
- 【阿里聚安全·安全周刊】500万台Android设备受感染|YouTube封杀枪支组装视频
- 【Vue课堂】Vue.js 父子组件之间通信的十种方式
- (转)Docker容器的重启策略及docker run的--restart选项详解
- redis服务以及phpredis扩展的安装
- Java集合类源码解析:LinkedHashMap
- Python3基础 str *运算 重复拼接字符串
- Hystrix使用说明,配置参数说明
- Linux 基础 —— Linux 进程的管理与监控
- 读取配置文件工具demo
- 事务的特性——ACID
- FastDFS分布式⽂文件系统
- ansible基本模块-yum
- 【记录】adb连不上手机
热门文章
- 求树的直径和中心(ZOJ3820)
- Yii 后台防止表单提交
- 写一个体验良好的git commit
- 使用colmap进行稠密重建
- Only a type can be imported. classname resolves to a package的解决
- Python大数据:外部数据获取(网页抓取)
- The superclass ";javax.servlet.http.HttpServlet"; was not found on the Java Build Path(Myeclipse添加Server Library)
- Django - Jsonp、CORS
- Mysql中datetime和timestamp区别
- JS对话框