JS数据结构开篇:线性表和栈
来源:互联网 发布:物联网域名注册 编辑:程序博客网 时间:2024/06/05 21:56
港真,,,学完数据结构,你会发现自己的代码阅读能力会提升很大一截,看别人优秀的代码或者开源的项目时候会显得游刃有余。
过去的数据结构大都是用C语言进行讲解的,此系列文章我将采用JavaScript(暂时采用ES5)语言来书写,如果你准备学习数据结构或者正在学习JavaScript,那么开始吧,这里数据结构和JavaScript都有了。
1.线性表
线性表又称列表,日常使用的列表如:代办事项清单、购物清单、消息列表等。
列表是一种最自然的数据组织方式。下面是列表常见的抽象数据类型定义
listSize (属性)列表的元素个数pos (属性)列表的当前位置clear (方法) 清空列表中的所有元素getElement(方法)返回当前位置的元素insert(方法)在现有元素后插入新元素append(方法)在列表的末尾添加新元素remove(方法)从列表中删除元素front(方法) 将列表的当前位置设移动到第一个元素end(方法)将列表的当前位置移动到最后一个元素prev(方法)将当前位置前移一位next(方法) 将当前位置后移以为hasNext(方法)判断后一位hasPrev判断前一位currPos(方法)返回列表的当前位置moveTo将当前位置移动到指定位置........................列表常见的类型定义基本上就是这些,列表的数据结构描述是基于数据来做的,这里比较简单,基本是把js数组对象的属性用方法包装一下就ok了,不再赘述,接下来主要看栈。2.栈
栈是一种特殊的列表,栈内的元素只能通过列表的一端访问,这一端称为栈顶。栈是一种后入先出(LIFO, last-in-first-out)的数据结构,
对栈的操作主要有3种:
- 将一个元素压入栈中, push()。
- 将一个元素从栈中弹出,pop()。
- 拿到栈顶的元素, peek()。
栈的实现
实现一个栈,存储数据的底层数据结构采用数据无疑的最方便的。
function Stack() { this.dataStore = []; this.top = 0; this.push = push; this.pop = pop; this.peek = peek; this.size = size; this.clear = clear;}//注意这里的this.top++,它放在this.top的后面,这样新入栈的元素就被放在top的当前值对应的位置,然后再将变量top的值加1,指向下一个位置function push (element) { this.dataStore[this.top++] = element;}
//这里和push恰恰相反。function pop () { return this.dataStore[--this.top];}
//返回栈顶元素function peek () { return this.dataStore[this.top - 1];}function size () { return this.top;}function clear () { this.top = 0; this.dataStore = [];}
下面看运行结果:
Remark:这里的代码主要用来演示基本的栈的实现,没有做push元素的时候参数不能为空校验、Stack类没有特地封装属性和方法,都是全局变量,暂无私有属性。
这里主要讲数据结构的代码实现思路,在这系列文章最后我将会采用面向对象的方式,对常用的数据结构和算法进行封装,提供一套常用的数据结构工具类和一些有趣的小算法。
栈的用途
栈的用途也是一个大的话题,这里暂时着重说数据结构本身,先不涉及用途,先罗列两点:1.栈通常是可以用来倒置一组数据的。2.栈在编程语言中的方法调用中就是采用压栈和出栈的形式。
至此,JavaScript数据结构的开篇讲完了,后续数据结构系列将是 队列 、链表、 哈希表(散列表)、 树 、图 、排序算法、 查找算法。
阅读全文
1 0
- JS数据结构开篇:线性表和栈
- Java数据结构(一):线性表之开篇
- 数据结构:线性表删除操作的php和js实现
- 数据结构:线性表删除操作的php和js实现
- 【数据结构】数据结构总结之线性表、栈和队列
- 数据结构---概论和线性表
- JS的基本数据结构实现---线性表
- 数据结构开篇(表)
- 数据结构复习之线性表、栈和队列 (上)
- 数据结构复习之线性表、栈和队列 (下)
- 《数据结构》复习之线性表(栈和队列)
- 数据结构(一) 线性表、栈和队列
- 数据结构-线性表和连接表实验
- 数据结构C/C++线性表和单链表
- 数据结构 线性表 顺序表示和实现
- java数据结构和算法(线性表)
- Java数据结构和算法:线性表
- 数据结构和算法03-线性表02
- Mycat从入门到放弃
- 一位资深程序员大牛给予Java初学者的学习路线建议
- linux环境下,集群中Hadoop版本更换
- Java集合框架
- nodejs微信公众号开发
- JS数据结构开篇:线性表和栈
- python参数传值的方式
- 深浅的拷贝
- bzoj2095 bridges 【网络流判欧拉回路】
- 2017 ACM Arabella Collegiate Programming Contest-L. All’s Wall That Ends Wall
- PAT (Basic Level) Practise (中文) 1056. 组合数的和(15)
- ECharts3.x中的点击事件与行为
- 分布式一致性算法(二)Paxos算法
- C语言(27)序号互换