有一些问题特别适合用栈来解决。本节就介绍几个这样的例子。
 
1) 数制间的相互转换                                    
可以利用栈将一个数字从一种数制转换成另一种数制。假设想将数字n 转换为以b 为基数的数字,实现转换的算法如下。
使用栈,在JavaScript 中实现该算法就是小菜一碟。下面就是该函数的定义,可以将数字转化为二至九进制的数字:
//============================使用Stack类====================================
/**
* 1.数制间的相互转换
*/
function mulBase(num, base){
var s = new Stack();
do{
s.push(num % base);
num = Math.floor(num / base);
}while (num > 0); var converted = "";
while(s.length() > 0){
converted += s.pop();
} return converted;
}
//下面展示了如何使用该方法将数字转换为二进制和八进制数。
var num = 32;
var base = 2;
var newNum = mulBase(num, base);
console.log(num + " converted to base " + base + " is " + newNum);
num = 125;
base = 8;
var newNum = mulBase(num, base);
console.log(num + " converted to base " + base + " is " + newNum);

打印如下:

2)回文                                            
回文是指这样一种现象:一个单词、短语或数字,从前往后写和从后往前写都是一样的。
比如,单词“dad”、“racecar”就是回文;如果忽略空格和标点符号,下面这个句子也是回文,“A man, a plan, a canal: Panama”;数字1001 也是回文。
 
使用栈,可以轻松判断一个字符串是否是回文。
我们将拿到的字符串的每个字符按从左至右的顺序压入栈。当字符串中的字符都入栈后,栈内就保存了一个反转后的字符串,最后的字符在栈顶,第一个字符在栈底。
字符串完整压入栈内后,通过持续弹出栈中的每个字母就可以得到一个新字符串,该字符串刚好与原来的字符串顺序相反。我们只需要比较这两个字符串即可,如果它们相等,就是一个回文。
 
 代码:
//============================使用Stack类====================================
/**
* 2.判断给定字符串是否是回文
*/
function isPalindrome(word){
var s = new Stack();
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;
}
} //测试代码:
var word = "hello";
if (isPalindrome(word)) {
console.log(word + " is a palindrome.");
}else {
console.log(word + " is not a palindrome.");
}
word = "racecar";
if (isPalindrome(word)) {
console.log(word + " is a palindrome.");
}else {
console.log(word + " is not a palindrome.");
}

打印:

 

3)递归演示                                                    
这里只用栈来模拟递归过程。
为了演示如何用栈实现递归,考虑一下求阶乘函数的递归定义。首先看看5 的阶乘是怎么定义的:
5! = 5×4×3×2×1 = 120
下面是一个递归函数,可以计算任何数字的阶乘:
 
使用栈来模拟计算5! 的过程,首先将数字从5 到1 压入栈,然后使用一个循环,将数字挨个弹出连乘,就得到了正确的答案:120。
代码:

//============================使用Stack类====================================
/**
* 3. 使用栈模拟递归过程
*/
function fact(n){
var s = new Stack();
while(n > 1){
s.push(n--);
} var product = 1;
while(s.length() > 0){
product *= s.pop();
}
return product;
} console.log(fact(5)); // 显示120
 
 

数据结构与算法JavaScript描述——栈的使用的更多相关文章

  1. 数据结构与算法JavaScript描述——栈

    栈就是和列表类似的一种数据结构,它可用来解决计算机世界里的很多问题. 栈是一种高效的数据结构,因为数据只能在栈顶添加或删除,所以这样的操作很快,而且容易实现. 栈的使用遍布程序语言实现的方方面面,从表 ...

  2. 《数据结构与算法JavaScript描述》

    <数据结构与算法JavaScript描述> 基本信息 作者: (美)Michael McMillan 译者: 王群锋 杜欢 丛书名: 图灵程序设计丛书 出版社:人民邮电出版社 ISBN:9 ...

  3. 翻阅《数据结构与算法javascript描述》--数组篇

    导读: 这篇文章比较长,介绍了数组常见的操作方法以及一些注意事项,最后还有几道经典的练习题(面试题). 数组的定义: JavaScript 中的数组是一种特殊的对象,用来表示偏移量的索引是该对象的属性 ...

  4. 数据结构与算法javascript描述

    <数据结构与算法javascript描述>--数组篇 导读: 这篇文章比较长,介绍了数组常见的操作方法以及一些注意事项,最后还有几道经典的练习题(面试题). 数组的定义: JavaScri ...

  5. 列表的实现-----数据结构与算法JavaScript描述 第三章

    实现一个列表 script var booklist = new List(); booklist.append('jsbook'); booklist.append('cssbook'); book ...

  6. 《数据结构与算法JavaScript描述》中的一处错误

    最近在看<数据结构与算法JavaScript描述>这本书,看到选择排序这部分时,发现一个比较大的错误. 原书的选择排序算法是这样的: function selectionSort() { ...

  7. 数据结构与算法 Javascript描述

    数据结构与算法系列主要记录<数据结构与算法 Javascript描述>学习心得

  8. 数据结构与算法JavaScript (一) 栈

    序 数据结构与算法JavaScript这本书算是讲解得比较浅显的,优点就是用javascript语言把常用的数据结构给描述了下,书中很多例子来源于常见的一些面试题目,算是与时俱进,业余看了下就顺便记录 ...

  9. 栈--数据结构与算法Javascript描述(4)

    栈 Stack 概念 栈是一种高效的数据结构,数据只能在栈顶添加或者删除,所以这样的操作很快,而且容易实现.栈的使用遍布程序语言的方方面面,从表达式求值到处理函数调用. 栈是一种特殊的列表,栈内的元素 ...

随机推荐

  1. CF911B

    题解: 枚举一下x x<=min(a,b) 然后判断a/x+b/x是否>=x 代码: #include<bits/stdc++.h> using namespace std; ...

  2. fzu Problem 2275 Game(kmp)

    Problem 2275 Game Accept: 62    Submit: 165Time Limit: 1000 mSec    Memory Limit : 262144 KB  Proble ...

  3. 通过格式化字符串漏洞绕过canary

    1.1    canary内存保护机制 1.1.1    canary工作原理 canary保护机制类似于/GS保护机制,是Linux下gcc编译器的安全保护机制之一,在栈中的结构如下图所示: 在函数 ...

  4. mac下初始化eclipse的安卓开发ndk开发环境

    最近电脑由windows换成mac了,很多环境都要重新搭建,顺便纪录下,方便以后查阅. 1.先到eclipse官网下载最新版eclipse,我下载的是neon版,下载后直接解压到即可使用(前提是你安装 ...

  5. L153

    警言是指传达一般真理或某种言论的短小句子.An aphorism is a short witty sentence which expresses a general truth or commen ...

  6. LINUX文件的权限

    一.权限设定的意义:系统最底层安全设定方法之,保证文件可以被可用的用户做相应操作. 二.文件权限的查看(alias) 命令:ls ls -l file ## 查看文件属性 ls -ld mkdir   ...

  7. Join, Group Join

    Linq的 Join对应SQL中的inner join,当左右两张表有匹配数据时才返回一条记录: Linq的 Group Join对应SQL中的LEFT OUTER JOIN,即使右表中没有匹配,也从 ...

  8. MP3格式音频文件结构解析

    MP3的全称是MPEG Audio Layer3,它是一种高效的计算机音频编码方案,它以较大的压缩比将音频文件转换成较小的扩展名为.MP3的文件,基本保持原文件的音质.MP3是ISO/MPEG标准的一 ...

  9. 深入理解Hystrix之文档翻译

    转载请标明出处: http://blog.csdn.net/forezp/article/details/75333088 本文出自方志朋的博客 什么是Hystrix 在分布式系统中,服务与服务之间依 ...

  10. Linux 释放物理内存和虚拟内存

    1.查看内存占用情况 $ free -m -h total used free shared buff/cache available Mem: .7G .0G .9G 385M 780M .0G S ...