zoukankan      html  css  js  c++  java
  • JavaScript数据结构 ---- 栈

    JavaScript数据结构 ---- 栈

    是一种特殊的列表,栈内的元素只能通过列表的一端访问,这一段称为栈顶。栈是一种后入先出(LIFO,last-in-first-out)的数据结构。
    对栈的两种主要操作是将一个元素压入栈和将一个元素弹出栈。入栈使用 push() 方法,出栈使用 pop() 方法。
    另外,pop方法虽然可以访问栈顶元素,但使用该方法后,栈顶元素也被从栈中永久性的删除了,可以使用 peek() 方法只返回栈顶元素而不删除它。

    stark


    栈的实现
    实现一个站,要先确定存储数据的底层数据结构,这里采用数组。
    定义 Stark 类的构造函数。

    function Stark() {
    	this.dataStore = []; //使用数组 dataStore 保存栈内元素
    	this.top = 0;        //变量 top 记录栈顶位置
    	this.push = push;    //向栈中压入一个新元素
    	this.pop = pop;      //返回栈顶元素,同时将 top 减 1
    	this.peek = peek;    //返回栈顶元素
    }
    

    实现 push() 方法,向栈中压入一个新元素。

    function push(element) {
    	this.dataStore[this.top++] = element;
    }
    

    实现 pop() 方法,返回栈顶元素,同时将 top 减 1

    function pop() {
    	return this.dataStore[--this.top];
    }
    

    实现 peek() 方法,返回栈顶元素。

    function peek() {
    	return this.dataStore[this.top - 1];
    }
    

    其它常用的方法。

    function length() {
    	return this.top;
    } // 返回栈内元素个数
    
    function clear() {
    	this.top = 0;
    } // 清空栈
    

    使用 Stark 类
    数制间的相互转换 --- 可以利用栈将一个数字从一种数制转换成另一种数制。
    假设想要将数字 n 转换为以 b 为基数的数字,实现算法如下:
    1. 最高位为 n % b,将此位压入栈。
    2. 使用 n/b 代替 n。
    3. 重复步骤1和2,直到 n = 0,且没有余数。
    4. 持续将栈内元素弹出,直到栈为空,依次将这些元素排列

    function nulBase(num, base) {
    	var s = new Stark();
    	do {
    		s.push(num % base);
    		num = Math.floor(num /= base);
    	} while (num > 0);
    	var converted = "";
    	while (s.length() > 0) {
    		converted += s.pop();
    	}
    	return converted;
    }
    

    回文 --- 一个单词、短语、或数字,从前往后写和从后往前写都是一样的。(eg:dad、NaN、1001、22) 使用栈可以轻松判定一个字符串是否是回文。先将字符串按从左到右的顺序压入栈,栈内就保存了一个反转后的字符串,通过持续弹出栈中的每个字母就可以得到一个新字符串,该字符串刚好与原来的字符串相反。只需比较这连个字符串是否相等就可以判断是否是回文。 ```js function isPalindrome(word) { var s = new Stark(); for (var i = 0; i < word.length; i++) { s.push(word[i]); } var rword = ""; while (s.length() > 0) { rword += s.pop(); }
    if (word == rword) {
    	return true;
    }
    else {
    	return false;
    }
    

    }

    <br>
    使用栈模拟递归
    ```js
    function fact(n) {
    	var s = new Stark();
    	while (n > 1) {
    		s.push(n--);
    	}
    	var product = 1;
    	while (s.length() > 0) {
    		product *= s.pop();
    	}
    	return product;
    }
    
    
  • 相关阅读:
    iOS之UITableView的上拉刷新
    iOS xml文件的解析方式 XMLDictionary,GDataXMLNode,NSXMLParser
    iOS学习基本常识
    iOS常用宏定义
    iOS查错机制
    轻量级sqlite是增删改查
    iOS开发UI篇—ios应用数据存储方式(归档) :转发
    iOS面向对象的建模:MVC(OC基础)
    iOS下bound,center和frame
    CSS----学习2
  • 原文地址:https://www.cnblogs.com/zhoufulin/p/5003397.html
Copyright © 2011-2022 走看看