JavaScript ----- 学习栈

news/2024/5/17 6:20:23

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

 

1. 对栈的操作

 对栈的两种主要操作就是将一个元素压入栈和将一个元素弹出栈。入栈使用push()方法,出栈使用pop()方法。

 图片演示了入栈和出栈的过程

pop() 方法虽然可以访问栈顶的元素,但是调用该方 法后,栈顶元素也从栈中被永久性地删除了。

peek() 方法则只返回栈顶元素,而不删除它。

clear()  清除栈内所有元素

length 属性记录栈内元素的个数

empty 属性,用 以表示栈内是否含有元素,使用 length 属性也可以达到同样的目的。

 

function Stack() {
    this.dataStore = [];
    this.top = 0;
    this.push = push;
    this.pop = pop;
    this.peek = peek;
    this.clear = clear;
    this.length = length;
}
function push(element) {
    this.dataStore[this.top++] = element;
}
function peek() {
    return this.dataStore[this.top - 1];
}
function pop() {
    return this.dataStore[--this.top];
}
function clear() {
    this.top = 0;
}
function length() {
    return this.top;
}
var s = new Stack(); 
s.push("David"); 
s.push("Raymond"); 
s.push("Bryan");
print("length: " + s.length()); print(s.peek());
var popped = s.pop();
print("The popped element is: " + popped); print(s.peek());
s.push("Cynthia");
print(s.peek());
s.clear();
print("length: " + s.length()); print(s.peek());
s.push("Clayton");
print(s.peek());

 

 使用Stack类

   数制间的相互转换

    将数字转换为二进制和八进制   

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;
}

print(mulBase(32, 2))
  1. (1)  最高位为 n % b,将此位压入栈。

  2. (2)  使用 n / b 代替 n。

  3. (3)  重复步骤 1 和 2,直到 n 等于 0,且没有余数。

  4. (4)  持续将栈内元素弹出,直到栈为空,依次将这些元素排列,就得到转换后数字的字符

    串形式

  5. 此算法只针对基数为 2~9 的情况

 

回文

使用栈,可以轻松判断一个字符串是否是回文。我们将拿到的字符串的每个字符按从左至 右的顺序压入栈。当字符串中的字符都入栈后,栈内就保存了一个反转后的字符串,最后的字符在栈顶,第一个字符在栈底,字符串完整压入栈内后,通过持续弹出栈中的每个字母就可以得到一个新字符串,该字符串刚好与原来的字符串顺序相反。我们只需要比较这两个字符串即可,如果它们相等,就是一个回文。

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;
    }
}

 

递归演示

求阶乘函数的递归定义。首先看看 5 的阶乘是怎么 定义的:

5! = 5×4×3×2×1 = 120

使用栈来模拟计算 5! 的过程,首先将数字从 5 到 1 压入栈,然后使用一个循环,将数字挨个弹出连乘,就得到了正确的答案:120。例 4-5 包含了该函数和测试程序的代码。

使用栈模拟递归过程

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;
}
print(factorial(5)); // 显示 120 print(fact(5)); // 显示 120

 

 

 

 

 

 

 

 

 


http://www.niftyadmin.cn/n/3655845.html

相关文章

.Net Micro Framework研究—IO读写

试验平台&#xff1a;Digi MF开发板&#xff08;图MF071028001.jpg&#xff09;与IO相关的部分如下&#xff1a;&#xff08;3&#xff09;拨码开关SW1 &#xff08;4&#xff09;拨码开关SW2 &#xff08;11&#xff09;GPIO灯—output &#xff08;10&#xff09;GPIO—input…

JavaScript----- 列表练习题

增加一个向列表中插入元素的方法&#xff0c;该方法只在待插元素大于列表中的所有元素时才执 行插入操作。这里的大于有多重含义&#xff0c;对于数字&#xff0c;它是指数值上的大小;对于字母&#xff0c;它 是指在字母表中出现的先后顺序。 题目 分析 1、一个向列表中插入…

.NET Framework/.NET Compact Framework/.NET Micro Framework功能集比较

该资料来源于三亚许云老师的 .NET Micro Framework的讲座&#xff0c;图片中红色部分表示支持的功能&#xff0c;绿色部分表示不支持&#xff0c;不过该图片我看了应该不是最新的&#xff0c;如.NET Compact Framework &#xff0c;xml是支持序列化的&#xff0c;但图片上显示不…

javaScript --- 队列学习

队列是一种列表&#xff0c;不同的是队列只能在队尾插入元素&#xff0c;在队首删除元素。 队列用于存储按 顺序排列的数据&#xff0c;先进先出&#xff0c;这点和栈不一样&#xff0c;在栈中&#xff0c;最后入栈的元素反而被优先处 理。 队列是一种先进先出(First-In-Firs…

.Net Micro Framework研究—Digi开发板初探

9月18日&#xff0c;.Net Mirco Framework 2007技术大会在北京召开&#xff08;相关文章请参见&#xff1a;http://blog.csdn.net/yefanqiu/archive/2007/09/18/1790404.aspx&#xff09;&#xff0c;张欣第一时间写了关于Digi开发板的相关文章&#xff08;文章请参见&#xff…

javaScript面试题整理 --- 什么是闭包,什么是立即执行函数,它的作用是什么?简单说一下闭包的使用场景

什么是闭包&#xff0c;简单说一下闭包的使用场景 要理解闭包&#xff0c;首先必须理解Javascript特殊的变量作用域 变量的作用域无非就是两种&#xff1a;全局变量和局部变量。 Javascript语言的特殊之处&#xff1a; 1、函数内部可以直接读取全局变量。 2、在函数外部自然无…

JavaScript----- 链表学习

1、数组的缺点 在其他语言中 数组的长度是固定的&#xff0c;所以数组被填满后在添加新的元素是非常困难的。在数组中添加和删除也是很麻烦的&#xff0c;需要把其他元素向前或者向后平移&#xff0c;以反映数组刚刚进行了添加或删除操作。 在JavaScript 中数组的主要问题是&a…

JavaScript ---- 字典学习

字典是一种以键-值对形式存储数据的数据结构 JavaScript的object类就是以字典的形式设计的&#xff0c; function Dictionary() {this.add add;this.datastore new Array();this.find find;this.remove removethis.showAll showAllthis.count countthis.clear clear}f…