java 二进制反码_Java学习第五篇:二进制(原码 反码 补码),位运算,移位运算,约瑟夫问题...
public classDemo3 {public static voidmain(String[] args) {
CycleLinkList cycleLinkList=newCycleLinkList();
cycleLinkList.setCycleLinkListLength(10);
cycleLinkList.initCycleLinkList();
cycleLinkList.Josephu(4, 6);
}
}/*** 節點結構*/
classNode {//編號
private intnumber;//指向下一個節點的引用
private Node nextNode=null;//構造函數
public Node(intnumber) {this.number=number;
}//設置nextNode節點
public voidsetNextNode(Node nextNode) {this.nextNode =nextNode;
}//得到nextNode節點
publicNode getNextNode() {returnnextNode;
}//得到編號
public intgetNumber() {returnnumber;
}
}/*** 循環鏈表*/
classCycleLinkList {//鏈表的長度
private int length=0;//指向鏈表頭結點的引用
private Node firstNode=null;/*** 設置鏈表的長度
*@paramlen 鏈表長度*/
public void setCycleLinkListLength(intlen) {this.length=len;
}/*** 初始化循環鏈表*/
public voidinitCycleLinkList() {//定義一個臨時節點
Node tempNode=null;for(int i=1;i<=length;i++) {//頭節點
if(1==i) {
Node headNode=newNode(i);this.firstNode=headNode;
tempNode=headNode;
}else{//尾節點
if(length==i) {
Node node=newNode(i);
tempNode.setNextNode(node);
tempNode=node;//將尾節點的nextNode引用指向鏈表的頭節點firstNode
tempNode.setNextNode(firstNode);
}else{ //其它節點
Node node=newNode(i);
tempNode.setNextNode(node);
tempNode=node;
}
}
}
}/*** 打印循環鏈表*/
public voidprintCycleLinkList() {
Node tempNode=this.firstNode;do{
System.out.println(tempNode.getNumber());
tempNode=tempNode.getNextNode();
}while (tempNode!=this.firstNode);
}/*** 約瑟夫問題
*@paramk 從第k個人開始報數
*@paramm 數m下*/
public void Josephu(int k, intm) {//判斷k的合法性
if( !(k>=1 && k<=this.length) ) {
System.out.println("傳入的k不正確");
System.exit(-1);
}//定義一個臨時節點
Node tempNode=this.firstNode;//先找到第k個人
for(int i=1;i
tempNode=tempNode.getNextNode();
}//數m下,將數到m的節點從循環鏈表中刪除//有兩種情況需要考慮,//第一種:m=1的情形//第二種:除了第一種的特殊情況,其他的只要找到數到m節點的的前一個節點即可,即數m-1下//第一種情形
if(1==m) {//從當前節點依次輸出出隊序列
int len=this.length;while( (len--)>0) {
System.out.println(tempNode.getNumber());
tempNode=tempNode.getNextNode();
}
}//第二種情形
else{//記錄出隊的節點數
int cnt=0;do{//數(m-1)下
for(int j=1;j
tempNode=tempNode.getNextNode();
}//出隊的節點
System.out.println(tempNode.getNextNode().getNumber());//記錄出隊的節點數
cnt++;//刪除數到m的節點
Node tempNode2=tempNode.getNextNode().getNextNode();
tempNode.setNextNode(tempNode2);//更新tempNode,從數到m的人下一個開始報數
tempNode=tempNode2;
}while (cnt!=this.length);
}
}
}
總結
以上是生活随笔為你收集整理的java 二进制反码_Java学习第五篇:二进制(原码 反码 补码),位运算,移位运算,约瑟夫问题...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java接口有非抽象方法_如果一个类没有
- 下一篇: java 拖动图片放大_Android