`
chasingdeer
  • 浏览: 8558 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

双向链表实现约瑟夫

阅读更多
写道
public class Count3Quit1 { 

// 数组实现 
public static int count(int num) { 
boolean[] flags = new boolean[num]; 
int leftNum = flags.length; 
int countNum = 0; 
int index = 0; 

while (leftNum > 1) { 
if (!flags[index]) { 
countNum++; 
if (countNum == 3) { 
flags[index] = true; 
leftNum--; 
countNum = 0; 
} 

} 
index++; 

if (index == flags.length) { 
index = 0; 
} 
} 
for (int i = 0; i < flags.length; i++) { 
if (!flags[i]) { 
return i + 1; 
} 
} 

return -1; 
} 

// 双向链表实现 
public static int countByLink(int num) { 
Node head = new Node(null, 1, null); 
Node tail = head; 

for (int i = 2; i <= num; i++) { 
Node next = new Node(tail, i, null); 
tail.setNext(next); 
tail = next; 
} 
tail.setNext(head); 
head.setPrevious(tail); 

int length = num; 
int countNum = 0; 

Node currentNode = head; 
while (currentNode.getData() != currentNode.getNext().getData()) { 
countNum++; 
if (countNum == 3) { 
currentNode.getPrevious().setNext(currentNode.getNext()); 
currentNode.getNext().setPrevious(currentNode.getPrevious()); 
countNum = 0; 
} 
currentNode = currentNode.getNext(); 
} 

return currentNode.getData(); 
} 

public static void main(String[] args) { 
System.out.println(countByLink(500)); 
} 

} 

class Node { 
private int data; 
private Node next; 
private Node previous; 

public Node getPrevious() { 
return previous; 
} 

public void setPrevious(Node previous) { 
this.previous = previous; 
} 

public int getData() { 
return data; 
} 

public void setData(int data) { 
this.data = data; 
} 

public Node getNext() { 
return next; 
} 

public void setNext(Node next) { 
this.next = next; 
} 

public Node(Node previous, int data, Node next) { 
super(); 
this.data = data; 
this.next = next; 

this.previous = previous; 
} 

}
 
 
分享到:
评论

相关推荐

    数据结构 用双向链表实现约瑟夫环

    数据结构大作业,c++用双向链表实现约瑟夫环,内含.h与.cpp

    双向链表实现约瑟夫环

    已知N个人(以编号1,2,3...n分别表示)围成一个圈。 从编号为K的人开始报数,数到M的那个人出列,他的下一个人又从1开始报数,依照此规律重复下去,直到圆圈中的人全部出列。 问题:请打印出这N个的...双向链表实现的

    双向链表-约瑟夫问题_双向链表约瑟夫问题_源码

    双向链表约瑟夫问题的解决方案不仅适用于理论研究,还可以帮助我们理解链表操作和循环逻辑。在实际应用中,这类问题可以映射到资源分配、任务调度等场景,通过优化算法来提高效率。 总的来说,利用双向链表解决...

    java链表实现约瑟夫问题

    约瑟夫问题,通过类实现的链表,并加以改进,做成双向链表

    约瑟夫环_双向链表(c++做的)

    下面我们将深入探讨如何使用C++实现约瑟夫环问题的双向链表解决方案: 1. **链表节点定义**:首先,我们需要定义一个链表节点结构体,包括一个整型数据(用于存储报数),一个指向下一个节点的指针,以及一个指向前...

    C++语言约瑟夫环,双向链表

    以下是一个简单的C++双向链表约瑟夫环的实现思路: 1. 定义链表节点结构体,包含数据域(序号)、前向指针和后向指针。 2. 创建链表,将所有参与者按顺序插入链表,形成环状。 3. 设置计数器和移除条件,通常是从1...

    【C语言】双向、循环链表实现约瑟夫环

    约瑟夫环有很多种问法,这里举例了其中一种,不过都大同小异 已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围, 每个人都有自己的一个密码。 从第一个人开始报数,数到m(初始设定)的那个人出列; 他的下...

    双向循环链表解决约瑟夫

    不再采用单向循环链表解决约瑟夫问题,而是双向循环链表解决约瑟夫,并采用一些技巧来解释使用说明,即教程,并且密码可以为正整数,也可以为负数

    双向循环链表解决约瑟夫实验报告

    《双向循环链表解决约瑟夫实验报告》 约瑟夫环问题,也称为约瑟夫问题或约瑟夫死亡循环,是一个著名的理论问题。它源于古罗马的一个传说,涉及一组囚犯围成一圈,按照一定的规则淘汰,直到只剩一人存活。在计算机...

    双向循环链表解决约瑟夫环问题

    用双向循环链表解决约瑟夫环问题的程序清单

    约瑟夫环C语言实现代码

    #### 知识点四:双向链表实现约瑟夫环 第三段代码展示了使用双向链表来解决约瑟夫环问题的方法。双向链表相比单向链表增加了对前一个节点的引用,使得删除节点的操作更为简便。 1. **创建双向链表**: - 创建链表...

    数据结构单向链表和双向链表

    在这个主题中,我们将深入探讨两种基本的链表类型:单向链表和双向链表。这两种链表在许多实际应用中都有广泛的应用,例如在操作系统、编译器设计、数据库系统等。 首先,我们来看单向链表。单向链表是一种线性数据...

    用单向循环链表解决约瑟夫问题的算法优劣性分析.doc

    链表有单向链表、双向链表、循环链表三种。单向循环链表是一种特殊的链表结构,它的尾节点的后继节点指向头结点,使得链表形成一个环。 解决约瑟夫问题的算法可以分为两个部分:建立链表和删除链结点。首先,建立一...

    约瑟夫双向生死游戏双向队列实现

    约瑟夫双向生死游戏是一种基于环形链表或队列的经典问题,它的基本思想源于一个古老的传说:在古代,一群囚犯被围成一个圈,按照一定的规则每隔一定人数淘汰一个人,直到只剩最后一个人为止。这个过程就被称为约瑟夫...

    约瑟夫环各种实现(链表、公式)-数据结构作业

    链表实现是最直观的方法,通常使用双向链表来模拟环状结构。每个节点代表一个人,节点包含两个属性:编号(表示人的顺序)和指针(指向下一个节点)。算法步骤如下: 1. 初始化链表,将所有人按照顺序插入链表形成...

    双向约瑟夫C语言游戏

    双向链表是一种链式存储结构,每个节点不仅包含数据,还包含两个指针,分别指向其前一个和后一个节点。在双向循环链表中,最后一个节点的指针会指向第一个节点,形成一个环形结构,这使得在链表中的导航更为灵活。 ...

    josephu问题 单链表 双链表

    《约瑟夫环问题与链表的实现》 约瑟夫环问题,也称为约瑟夫问题,源自古罗马的一个传说。问题的核心是:一群人在一个圆圈中按顺时针方向站立,从某个人开始报数,每报到特定数字的人将离开圆圈,然后从下一个人继续...

    深入解析C++的循环链表与双向链表设计的API实现

    在C++编程中,循环链表和双向链表是两种重要的数据结构,它们在处理动态数据集合时提供了灵活且高效的方式。循环链表是单链表的一种变体,它的最后一个节点指向链表的第一个节点,形成了一个逻辑上的环。双向链表则...

    约瑟夫环的数据结构实现

    在约瑟夫环中,我们可以创建一个双向链表,每个节点代表一个人,并包含指向其左右相邻人的指针。当某个人被排除时,我们只需要更新相邻节点的链接即可。例如,如果报数到3的人会被淘汰,我们可以通过遍历链表,每数3...

    C语言实现的约瑟夫问题.

    自己用C语言写的功能比较齐全的约瑟夫环的代码。可以设置开始位置。设置数到的数字。使用了双向链表。比较适合新手用来学习。

Global site tag (gtag.js) - Google Analytics