package\ package2; import\ java.util.Scanner; class\ Node { int\ data; Node\ next; Node(int\ data)\ { this.data\ =\ data; } } public\ class\ JosephusProblem\ { private\ static\ Scanner\ scanner; private\ static\ int\ p; public\ static\ void\ main(String[]\ args)\ { scanner\ =\ new\ Scanner(System.in); System.out.print("请输入总人数n:"); int\ n\ =\ scanner.nextInt(); System.out.print("请输入报数m:"); int\ m\ =\ scanner.nextInt(); System.out.print("请输入最终剩余人数p:"); setP(scanner.nextInt()); Node\ head\ =\ createJosephusCircle(n); Node\ current\ =\ head; while\ (current.next\ !=\ current)\ { for\ (int\ i\ =\ 1; i\ <\ m\ -\ 1; i++)\ { current\ =\ current.next; } System.out.print(current.next.data\ +\ " "); current.next\ =\ current.next.next; current\ =\ current.next; } System.out.println(current.data); } private\ static\ Node\ createJosephusCircle(int\ n)\ { Node\ head\ =\ new\ Node(1); Node\ current\ =\ head; for\ (int\ i\ =\ 2; i\ <=\ n; i++)\ { current.next\ =\ new\ Node(i); current\ =\ current.next; } current.next\ =\ head; return\ head; } public\ static\ int\ getP()\ { return\ p; } public\ static\ void\ setP(int\ p)\ { JosephusProblem.p\ =\ p; } } 在数据结构中采用什么逻辑结构为什么内容:在这个程序中,采用了循环链表作为逻辑结构。循环链表是一种链表的变体,其中最后一个节点的next指针指向第一个节点,形成一个循环。在Josephus问题中,每个人都被表示为一个节点,并且按照顺序连接在一起。循环链表的优势在于可以方便地实现循环遍历和删除操作,符合Josephus问题中每次报数的需求。

约瑟夫环问题Java实现及循环链表应用

原文地址: https://www.cveoy.top/t/topic/pqq2 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录