开题:算法
不冒任何险,什么都不作,什么也不会有,什么也不是。
本文目录数据结构
和队列同样,栈也是一种表结构,可是和队列的“先进先出”不一样的是栈是“先进后出”的一种数据结构,它更像咱们生活中向箱子里放东西,后放的在上面,最早被咱们取出来。this
因为栈是“先进后出”的结构,因此咱们基本上都是对栈顶元素的操做,任何不在栈顶的元素都不能被访问,为了获得栈底的元素,咱们须要删除栈顶的元素。3d
由以上可知,“出栈”和“入栈”操做是栈中主要的两个功能, 咱们还须要设置top做为整个栈的指针,当向栈中压入元素时,该变量增大,指向最新的元素,有元素出栈时,该变量减少,指向如今的栈顶元素。咱们可能只但愿访问栈顶元素,并不想将它移出栈因此咱们又须要一个getTop方法,再加上clear清除全栈、empty栈是否为空和length获取栈长度的方法基本上就知足了咱们对于栈的使用须要。指针
function Inn(){ var items = []; var top = 0; //入栈 this.push = function(obj){ items[top++] = obj; }; //获取栈顶元素并删除 this.pop = function(){ return items[--top]; }; //获取栈顶元素但不删除 this.getTop = function(){ return items[top -1]; }; //清除栈数据 this.clear = function(){ top = 0; }; //获取栈的长度 this.length = function(){ return top; }; //栈是否为空 this.empty = function(){ return top === 0; }; } var i = new Inn(); i.push({ a: 1, b: 2 }); i.push({ c: 3, d: 4 }); console.log(i.length()); console.log(i.pop()); console.log(i.getTop()); console.log(i.length()); i.clear(); console.log(i.length());
输出结果为:code
2 {c: 3, d: 4} {a: 1, b: 2} 1 0
实现一个优秀的算法须要一个好的数据结构来支撑,所以咱们能够用栈来作好多事情,例如咱们作ACM时的判断回文blog
把相同的词汇或句子,在下文中调换位置或颠倒过来,产生首尾回环的情趣,叫作回文,也叫回环。(取自百度百科)
咱们只考虑文字对应位置颠倒的状况,即文字从前日后和从后往前写都是同样的状况。好比单词“dad”,“racecar”就是回文;数字1001也是回文。队列
使用栈能够比较轻松的去判断一个字符是不是回文。咱们能够将文字从左往右依次压入栈中,而后将将栈中数据依次弹出造成一个新的字符串,最后判断两个字符串是否相等便可。ip
function Inn(){ var items = []; var top = 0; //入栈 this.push = function(obj){ items[top++] = obj; }; //获取栈顶元素并删除 this.pop = function(){ return items[--top]; }; //获取栈顶元素但不删除 this.getTop = function(){ return items[top -1]; }; //清除栈数据 this.clear = function(){ top = 0; }; //获取栈的长度 this.length = function(){ return top; }; //栈是否为空 this.empty = function(){ return top === 0; }; } var inn = new Inn(); var palindrome = '柳庭风静人眠昼,昼眠人静风庭柳'; for (var i = 0; i < palindrome.length; i++) { inn.push(palindrome[i]); } var palindrome2 = ''; while(!inn.empty()){ palindrome2 +=inn.pop(); } if (palindrome == palindrome2) { console.log('这是一个回文字符串'); }else{ console.log('这不是一个回文字符串'); }
输出结果为:字符串
这是一个回文字符串
在进行实现转换时咱们先看一下咱们十进制转换为二进制的图
咱们假设将数字n转换为以b为基数的数字,实现步骤以下:
function Inn(){ var items = []; var top = 0; this.push = function(obj){ items[top++] = obj; }; this.pop = function(){ return items[--top]; }; this.getTop = function(){ return items[top -1]; }; this.clear = function(){ top = 0; }; this.length = function(){ return top; }; //栈是否为空 this.empty = function(){ return top === 0; }; } /******* 进制转换 *******/ var n = 4396; var inn = new Inn(); do{ inn.push(n % 2); n = Math.floor( n / 2 ); }while(n > 0); var n22 = ''; while(!inn.empty()){ n22 += inn.pop(); } console.log(parseInt(n22));
输出结果为:
1000100101100