js数据结构与算法----栈与队列
来源:互联网 发布:linux 解压war包 编辑:程序博客网 时间:2024/05/16 09:38
栈是一种遵从后进先出原则的有序集合。新添加的或者待删除的元素都保存在栈的末尾,称作栈顶,另一端就称作是栈底。在栈里,新元素都靠近栈顶,旧元素都接近栈底。
创建一个类来表示 栈
function Stack() {
var items = [];
this.push = function(element){//添加元素
items.push(element);
};
this.pop = function(){//删除元素
return items.pop();
};
this.peek = function(){
return items[items.length-1];//返回栈顶的元素
};
this.isEmpty = function(){
return items.length == 0;//检查栈是否为空
};
this.size = function(){
return items.length;//返回栈里的元素的数量
};
this.clear = function(){
items = [];//清空栈
};
this.print = function(){
console.log(items.toString());//显示栈里的内容
};
}
十进制转换二进制算法
function divideBy2(decNumber){
var stack=new Stack();
//利用stack实现十进制到二进制的转换算法
var rem,binaryString = '';
while(decNumber>0){
rem=Math.floor(decNumber % 2);
stack.push(rem);
decNumber=Math.floor(decNumber / 2)
}
while(!stack.isEmpty()){
binaryString+=remStack.pop().toString();
}
return binaryString;
}
divideBy2(10) //1010
队列
队列是遵循先进先出原则的一组有序的项。队列在尾部添加新元素,并从顶部移除元素。最新添加的元素必须排在队列的末尾。
创建一个类来表示 队列
function Queue(){
//这里是属性和方法
var items=[];
this.enqueue = function(element){
items.push(element);//添加元素(最后)
};
this.dequeue=function(){
return items.shift();//移除队列的第一(即排在队列最前面的)项,并返回被移除的元素。
};
this.front=function(){
return items[0];//返回队列的第一个元素
};
this.isEmpty = function(){
return items.length == 0;
};
this.clear = function(){
items = [];
};
this.size = function(){
return items.length;
};
this.print = function(){
console.log(items.toString());
};
}
优先队列
实现一个优先队列,有两种选项:设置优先级,然后正确的位置里添加元素;或者用入列操作添加元素,然后按照优先级移除他们。在这个示例中,我们将会在正确的位置添加元素,因此可以对它们使用默认的出列操作:
function PriorityQueue() {
var items = [];
function QueueElement(element, priority) { // {1}
this.element = element;
this.priority = priority;
}
this.enqueue = function (element, priority) {
var queueElement = new QueueElement(element, priority);
if (this.isEmpty()) {
items.push(queueElement); // {2}
} else {
var added = false;
for (var i = 0; i < items.length; i++) {
if (queueElement.priority <
items[i].priority) {
items.splice(i, 0, queueElement); // {3}
added = true;
break; // {4}
}
}
if (!added) { //{5}
items.push(queueElement);
}
}
};
//其他方法和默认的Queue实现相同
}
默认的Queue类和PriorityQueue类实现上的区别是,要向PriorityQueue添加元素,需要创建一个特殊的元素,(行{1})。这个元素包含了要添加到队列的元素(它可以是任意类型)及其在队列中的优先级。
如果队列为空,可以直接将元素入列(行{2})。否则,就需要比较该元素与其他元素的优先级。当找到一个比要添加的元素的priority值更大(优先级更低)的项时,就把新元素插入到它之前(根据这个逻辑,对于其他优先级相同,但是先添加到队列的元素,我们同样遵循先进先出的原则)。要坐到这一点,我们可以用JavaScript的array累的splice方法。一旦找到priority值更大的元素,就插入新元素(行{3})并终止队列循环(行{4})。这样,队列也就根据优先级排序了。
如果要添加元素的priority值大于任何已有的元素,把它添加到队列的末尾就行了(行{5})。
var priorityQueue = new PriorityQueue();
priorityQueue.enqueue("John", 2);
priorityQueue.enqueue("Jack", 1);
priorityQueue.enqueue("Camila", 1);
priorityQueue.print();
第一个被添加的元素是优先级为2的John,因为此前队列为空,所以它是队列中唯一的元素。接下来,添加了优先级为1的Jack,由于Jack的优先级高于John,它就成了队列中的第一个元素。然后,添加了优先级也为1的Camila。Camila的优先级和Jack相同,所以它会被插入到Jack之后(因为Jack先被插入队列);Camila的优先级高于John,所以它会被插入到John之前。
0 0
- js数据结构与算法----栈与队列
- 数据结构与算法--栈、队列(队列)
- 【数据结构与算法】队列
- 数据结构与算法《队列》
- 数据结构与算法-队列
- 数据结构与算法--队列
- 数据结构与算法---队列
- 数据结构与算法-队列
- 数据结构与算法之----栈与队列
- 数据结构与算法分析:栈与队列
- 数据结构与算法分析:栈与队列
- 【数据结构与算法02】栈与队列
- 数据结构与算法之栈与队列
- 数据结构与算法之栈与队列
- 数据结构与算法之栈与队列
- 数据结构与算法之栈与队列
- 数据结构与算法--栈与队列
- Java数据结构和算法--栈与队列
- 【MySQL】20个经典面试题,全部答对月薪10k+
- Oracle条件语句
- 线性表实现之多项式
- *运算符,->运算符重载与智能指针
- Unity之Tango运动跟踪(二)
- js数据结构与算法----栈与队列
- 图片上传(Base64)
- hibernate中的cascade属性
- 常见的一些C#开源框架或者开源项目
- 链表操作一【合并链表】【严蔚敏】
- 天数计算
- win10系统下配置免安装MySQL【可以生成data文件夹,亲测】
- 最短路-Dijkstra算法
- java连接Oracle数据库