约瑟夫问题的代码实现
//根据用户的输入计算小孩出圈的顺序
/**
*
* @param start 表示从第几个小孩开始
* @param count 表示数几次
* @param nums 表示有几个小孩
*/
public void countBoy(int start,int count,int nums){
//先对数据进行校验
if (first == null || start < 1 || start > nums){
System.out.println("输入的参数有误");
return;
}
//创建辅助指针helper
Boy helper = first;
while (true){
if (helper.getNext() == first){
break;
}
helper = helper.getNext();
}
//先让first和helper移动到开始的那个小孩那里
for (int i = 1;i < start;i++){
first = first.getNext();
helper = helper.getNext();
}
//这里用一个循环来让小孩一直出圈,直到只剩一个小孩
while (true){
if (first == helper){
break;
}
for (int j = 1;j < count;j++){
first = first.getNext();
helper = helper.getNext();
}
//first制的就是要出圈的小孩
System.out.printf("第%d个小孩出圈",first.getNo());
System.out.println();
//让first所指的小孩出圈
first = first.getNext();
helper.setNext(first);
}
System.out.printf("最后所剩的小孩是%d",first.getNo());
}
栈
它是一种特殊的线性表,只能在表尾进行插入和删除操作,遵循先进后出的原则。栈常用于程序中的函数调用、表达式求值、浏览器的前进后退功能等场景。
数组模拟栈
代码实现
public class ArrayStatckDemo {
public static void main(String[] args) {
//测试栈能不能使用
ArryStatck arryStatck = new ArryStatck(4);
String str = "";
Scanner scanner = new Scanner(System.in);
boolean loop = true;//控制是否退出菜单
while (loop){
System.out.println("show : 表示显示栈");
System.out.println("exit : 表示退出栈");
System.out.println("push : 表示入栈");
System.out.println("pop : 表示出栈");
System.out.println("输入选择");
str = scanner.next();
switch (str){
case "show" :
arryStatck.show();
break;
case "push":
System.out.println("请输入要进入的数字");
int value = scanner.nextInt();
arryStatck.push(value);
break;
case "pop":
try {
int res = arryStatck.pop();
System.out.printf("出栈的数字是%d",res);
}catch (Exception e){
System.out.println(e.getMessage());
}
break;
case "exit":
scanner.close();
loop = false;
break;
}
}
System.out.println("程序已退出");
}
}
//定义一个类表示栈结构
class ArryStatck{
private int maxsize;
private int [] statck;//数组模拟栈
private int top = -1;//表示栈顶,初始值为-1
//构造器
public ArryStatck(int maxsize) {
this.maxsize = maxsize;
statck = new int[this.maxsize];//数组只用先初始化才能进行赋值
}
//判断是否zhanman
public boolean isFull(){
return top == maxsize-1;
}
//判断是否栈空
public boolean isEpety(){
return top == -1;
}
//入栈push
public void push(int value){//定义一个值
//队列和栈都要判断是否满
if (isFull()){
System.out.println("沾满");
return;
}
top++;
statck[top] = value;
}
//出栈pop
public int pop(){//出栈要将值显示出来,所以int
//判断是否空
if (isEpety()){
throw new RuntimeException();
}
int value = statck[top];//出栈是先赋值
top--;
return value;
}
//显示栈的情况
public void show(){
if (isEpety()){
System.out.println("站控,没有数据");
return;
}
//要从栈顶开始显示数据
for (int i = top;i >= 0;i--){
System.out.println(statck[i]);
}
}
}
栈实现综合计算器
明日实现代码,今日到此为止