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种:

  1. 将一个元素压入栈中, push()。
  2. 将一个元素从栈中弹出,pop()。
  3. 拿到栈顶的元素, 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数据结构的开篇讲完了,后续数据结构系列将是 队列 、链表、  哈希表(散列表)、 树 、图 、排序算法、 查找算法。