javascript中的双向队列

1.概念

/*--------------双向Queue类的定义和测试代码----------------*/
function Queue(){
        this.dataStore = [];
        this.enqueueFront = enqueueFront;
        this.enqueueBack = enqueueBack;
        this.dequeueFront = dequeueFront;
        this.dequeueBack = dequeueBack;
        this.front = front;
        this.back = back;
        this.toString = toString;
        this.empty = empty;
}

//尾部入队,就是在数组的末尾添加一个元素
function enqueueBack(element){
    this.dataStore.push(element);
}

//头部入队,就是在数组的头部添加一个元素
function enqueueFront(element){
    this.dataStore.splice(0,0,element);
}

//尾部出队,就是删除数组的最后一个元素
function dequeueBack(){
    return this.dataStore.splice(this.dataStore.length-1, 1);
}

//出队,就是删除数组的第一个元素
function dequeueFront(){
    return this.dataStore.shift();
}

//取出数组的第一个元素
function front(){
    return this.dataStore[0];
}
//取出数组的最后一个元素
function back(){
    return this.dataStore[this.dataStore.length-1];
}

function toString(){
    var retStr = "";
    for (var i=0; i<this.dataStore.length; ++i) {
        retStr += this.dataStore[i] + "&nbsp;"
    }
    return retStr;
}
//判断数组是否为空
function empty(){
    if(this.dataStore.length == 0){
        return true;
    }else{
        return false;
    }
}
//返回数组中元素的个数
function count(){
    return this.dataStore.length;
}

var q = new Queue();
q.enqueueFront("1");
q.enqueueFront("2");
q.enqueueBack("3");
q.enqueueBack("4");
document.write(q.toString());
document.write(‘<br>‘);

q.dequeueFront();
document.write(q.toString());
document.write(‘<br>‘);

q.dequeueBack();
document.write(q.toString());
document.write(‘<br>‘);
document.write(‘<br>‘);

输出结果

2.代码实现

/*---------------------------判断字符串是否是回文-------------------------*/
function isPalindrome(str){
    var queue = new Queue();
    for (var i=0; i<str.length; i++) {
        queue.enqueueFront(str[i]);
    }

    var newStr = "";
    while (!queue.empty()){
        newStr += queue.dequeueFront();
    }

    document.write(newStr);
    document.write(‘<br>‘);
    if(str == newStr){
        document.writeln(str + " 是回文");
    }else{
        document.writeln(str + " 不是回文");
    }
}

isPalindrome("racecar");
document.write(‘<br>‘);
isPalindrome("helloword");

输出结果:

时间: 2024-08-05 19:08:32

javascript中的双向队列的相关文章

javascript中array类型队列方法总结

队列方法 数组推入: push()    unshift()   调用方法返回数组新长度 数组移除: pop()     shift()       调用方法返回移除的那个元素 注:ie7及更早的版本中,unshift()方法总是返回undefined Demo

javascript中的栈、队列。

                       javascript中的栈.队列 栈方法     栈是一种LIFO(后进先出)的数据结构,在js中实现只需用到2个函数 push()  接受参数并将其放置数组尾,并返回修改后的数组长度. pop()  移除数组尾的最后一项,并返回移除项的值. 事例: var colors = new Array();var count = colors.push("red","green"); count = colors.push(&

javascript中的队列结构

1.概念 队列和栈结构不同,栈是一种后进先出的结构,而队列是一种先进先出的结构.队列也是一种表结构,不同的是队列只能在队尾插入元素,在队首删除元素,可以将队列想象成一个在超时等待排队付钱的队伍,或者在银行拿的号子,排在前面的人拥有优先服务权.队列是一种FIFO(First In First Out).队列用在很多地方,比如提交操作系统执行一系列的进程,打印任务池等,一些仿真系统使用队列来模拟银行或者超时里排队的顾客. 队列主要有两种操作,祥队列中插入新元素和删除队列中的元素.插入操作也叫入队,删

多线程编程学习六(Java 中的阻塞队列).

介绍 阻塞队列(BlockingQueue)是指当队列满时,队列会阻塞插入元素的线程,直到队列不满:当队列空时,队列会阻塞获得元素的线程,直到队列变非空.阻塞队列就是生产者用来存放元素.消费者用来获取元素的容器. 当线程 插入/获取 动作由于队列 满/空 阻塞后,队列也提供了一些机制去处理,或抛出异常,或返回特殊值,或者线程一直等待... 方法/处理方式 抛出异常 返回特殊值 一直阻塞 超时退出 插入方法 add(e) offer(e) put(e) offer(e, timeout, unit

JavaScript中的三种弹出对话框

JavaScript中的三种弹出对话框 *****本文来自互联网****** 学习过js的小伙伴会发现,我们在一些实例中用到了alert()方法.prompt()方法.prompt()方法,他们都是在屏幕上弹出一个对话框,并且在上面显示括号内的内容,使用这种方法使得页面的交互性更精彩,实际上我们经常会在进行网页浏览时简单这种类型的对话框,在用户与应用程序进行双向交流时,经常要用到对话框.avascript的三种对话框是通过调用window对象的三个方法alert(),confirm()和prom

poj 2905 双向队列(待补充)

Parallel Computer Simulator Description Programs executed concurrently on a uniprocessor system appear to be executed at the same time, but in reality the single CPU alternates between the programs, executing some number of instructions from each pro

deque双向队列

对于双向队列,与队列queue以及vector容器的区别就在于,名字不同,也就是它是双向的,可以从头开始操作,也可以从末尾开始操作. 双向队列的常用方法跟队列queue差不多: 头文件: #include<deque> 函数: 构造/析构 deque<int>q  构造一个空的双向队列 deque<int>q(q1)  构造q,并复制q1 deque<int>q(n)  创建deque,含有n个数据,数据均由缺省构造函数产生 deque<int>

C++ Double Ended Queues(双向队列)

双向队列和向量很相似,但是它允许在容器头部快速插入和删除(就像在尾部一样). Constructors 创建一个新双向队列 Operators 比较和赋值双向队列 assign() 设置双向队列的值 at() 返回指定的元素 back() 返回最后一个元素 begin() 返回指向第一个元素的迭代器 clear() 删除所有元素 empty() 返回真如果双向队列为空 end() 返回指向尾部的迭代器 erase() 删除一个元素 front() 返回第一个元素 get_allocator()

理解与使用Javascript中的回调函数 -2

在javascript中回调函数非常重要,它们几乎无处不在.像其他更加传统的编程语言都有回调函数概念,但是非常奇怪的是,完完整整谈论回调函数的在线教程比较少,倒是有一堆关于call()和apply()函数的,或者有一些简短的关于callback的使用示例. 函数也是对象 想弄明白回调函数,首先的清楚地明白函数的规则.在javascript中,函数是比较奇怪的,但它确确实实是对象.确切地说,函数是用 Function()构造函数创建的Function对象.Function对象包含一个字符串,字符串