《数据结构与算法JavaScript描述》读书笔记--第四章-栈

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

1 对栈的操作

栈是一种特殊的列表,栈内的元素只能通过列表的一端访问,这一端称之为栈顶。
栈具有后入先出的特点。所以任何不在栈顶的元素都无法访问,为了得到栈底的元素,必须拿掉上面的元素。
栈的主要操作:

  • 将一个元素压入栈,使用push()方法
  • 将一个元素弹出栈,使用pop()方法,会删除栈顶元素
  • 预览栈顶元素,peek()方法,不会删除

在这里插入图片描述
记录栈顶元素的位置,同事为了标记哪里可以加入元素,我们使用变量top。除push(),pop(),peek()外,栈还有其他方法及属性。clear()清除栈内所有元素,length记录栈内元素的个数,empty属性表示栈内是否含有元素。

2 栈的实现

这里采用数组作为存储数据的底层数据结构。

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

3 使用stack类

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

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

3.3 递归演示

使用栈模拟递归过程

function fact(n) {
	var s = new Stack()
	while (n > 1) {
		s.push(n--)
	}
	while(s.length > 0) {
		product *= s.pop()
	}
	return product
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值