脚本宝典收集整理的这篇文章主要介绍了javascript代码实例教程-Javascript数据结构算法之链表(约瑟夫环),脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。小宝典致力于为广大程序猿(媛)提供高品质的代码服务,请大家多多光顾小站,小宝典在此谢过。
Javascript数据结构算法之链表(约瑟夫环)。在很多编程语言中,数组的长度是固定的;在数组中添加和删除元素很麻烦。而Javascript数组并不存在上述问题,因为Javascript中,数组被实现为对象,而且拥有自己的一系列方法,例如push(),shift(),splice()。然而,Javascript中,数组的主要问题也是被实现成对象导致的效率低下。
链表是由一组节点组成,每个节点除了包括一个数据,还包括使用一个对象的引用指向它的后继。指向另一个节点的引用叫做链。链表最前面有一个特殊的节点,叫做头节点。链表最后的节点指向一个null节点。遍历链表,就是跟着链,从链表的首元素走到尾元素。
链表的JS实现 解决实际问题
链表的JS实现
链表包含两个类。Node类用来表示节点。LList类提供了插入节点,删除节点,查找节点,显示链表元素等辅助方法。
//llist.js
//Node对象定义
function Node(element){
this.element = element;
this.next = null;
}
//LList对象定义
function LList(){
this.head = new Node("head");
this.find = find;
this.insert = insert;
this.remove = remove;
this.findPrevious = findPRevious;
this.display = display;
}
function find(ITem){
VAR currNode = this.head;
while(currNode.element != item)
{
currNode = currNode.next;
}
return currNode;
}
function insert(element, item){
var newNode = new Node(element);
var current = this.find(item);
newNode.next = current.next;
current.next = newNode;
}
function findPrevious(item){
var current = this.head;
while(current.next.element != item && current.next != null)
{
current = current.next;
}
return current;
}
function remove(item){
var prevNode = this.findPrevious(item);
if(prevNode.next != null)
prevNode.next = prevNode.next.next;
}
function display(){
var str = "";
var current = this.head;
while(current.next != null)
{
str += current.next.element + "/n";
current = current.next;
}
return str;
}
//实例化一个链表
var oneLList = new LList();
链表的实际应用
问题描述:传说在公元1 世纪的犹太战争中,犹太历史学家弗拉维奥·约瑟夫斯和他的40 个同胞被罗马士兵包围。犹太士兵决定宁可自杀也不做俘虏,于是商量出了一个自杀方案。他们围成一个圈,从一个人开始,数到第三个人时将第三个人杀死,然后再数,直到杀光所有人。约瑟夫和另外一个人决定不参加这个疯狂的游戏,他们快速地计算出了两个位置,站在那里得以幸存。请问哪两个位置?
(一)网页展示
@H_724_126@
(二)htML代码
约瑟夫环
(三)Javascript方法
循环链表和单向链表相似,节点类型都是一样的。唯一的区别是,在创建循环链表时,让其头节点指向本身:head.next = head。这样便形成了循环链表。
//circleList.js
//直接构建1-41编号的循环链表,无需定义插入和删除操作。
function Node(element){
this.element = element;
this.next = null;
}
function LList(num){
var head = new Node(1);
var p = head;
for(var i=2; i<=num; i++)
{
var temp = new Node(i);
p.next = temp;
p = temp;
}
p.next = head;
return head;
}
var cirLinkList = new LList(41);
function getKilled(){
var current = cirLinkList;
var str = "";
while(current.next.element != current.element)
{
for(var i=1; i<3; i++)
{
var temp = current;
current = current.next;
}
//删除节点的本质即改变其前一个元素的后继
temp.next = current.next;
str += current.element + " ";
current = temp.next;
}
str += current.element;
//将杀人顺序显示在网页上
var dresult = document.getElementById("dying_PEople");
dresult.innerHTML = str;
}
觉得可用,就经常来吧! 脚本宝典 欢迎评论哦! js脚本,巧夺天工,精雕玉琢。小宝典献丑了!
以上是脚本宝典为你收集整理的javascript代码实例教程-Javascript数据结构算法之链表(约瑟夫环)全部内容,希望文章能够帮你解决javascript代码实例教程-Javascript数据结构算法之链表(约瑟夫环)所遇到的问题。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。