Java数据结构与算法之栈的相关操作(基本操作+进制转换)的小练习

package com.wrx.basicKnowledge.oj.oct9;
import java.util.Scanner;
/**
 * @auther Len901
 * @time 2022-10-09-7:39
 */
//栈的相关操作
public class StackDemo {
    public static void main(String[] args) {
        System.out.println("请输入一个数字代表栈的大小:");
        Scanner scanner = new Scanner(System.in);
        int n= scanner.nextInt();
        Stack stack = new Stack(n);
        //初始化栈,即想栈中添加初始数据
        System.out.println("请向栈中加入初始数据");
        for (int i=0;i<n;i++){
            System.out.println("请输入第"+(i+1)+"个元素:");
            int m=scanner.nextInt();
            //入栈操作
            stack.push(m);
        }
        //输出初始化后的栈
        stack.list();
        //出栈操作
        try{
        	int res=stack.pop();
            System.out.println("出栈的数据是:"+res);
            System.out.println("此时栈的长度为:"+stack.length());
        }catch(Exception e){
            System.out.println(e.getMessage());
        }
        //输出出栈后的栈
        stack.list();
        //输出栈顶元素
        int value=stack.out();
        System.out.println("目前栈顶元素为:"+value);
//        //清空栈
//        stack.clean();
//        stack.list();
//        scanner.close();
        //进制转换操作
        System.out.println("在此输入待转换数字 :");
        int num = scanner.nextInt();
        System.out.println("请输入想要转换的进制(2/4/8/10/16) :");
        int target = scanner.nextInt();
        Exchange exchange = new Exchange(num,target);
        exchange.changeNum(num,target);
        System.out.println();
    }
}
class Stack{
    private int maxSize;//栈的大小
    private int[] stack;//数组模拟栈,数据就放在该数组中
    private int top=-1;//top表示栈顶
    //构造器,构造栈的大小
    public Stack(int maxSize) {
        this.maxSize = maxSize;
        stack=new int[this.maxSize];
    }
    //栈满
    public boolean isFull(){
        return top==maxSize-1;
    }
    //栈空
    public boolean isEmpty(){
        return top==-1;
    }
    //显示栈的长度
    public int length(){
        return top+1;
    }
    //显示栈的情况,即遍历栈,遍历时需要从栈顶开始显示数据
    public void list(){
        if(isEmpty()){
            System.out.println("栈空,没有数据");
            return;
        }
        //需要从栈顶开始显示数据
        for (int i=top;i>=0;i--){
            System.out.println("stack["+i+"]="+stack[i]);
        }
    }
    //入栈操作
    public void push(int value){
        //先判断栈是否满
        if (isFull()){
            System.out.println("栈已满,无法进行入栈操作");
        }
        top++;
        stack[top]=value;
    }
    //出栈操作
    public int pop(){
        //先判断栈是否为空
        if (isEmpty()){
            throw new RuntimeException("栈空,没有数据,无法进行出栈操作");
        }
        int value=stack[top];
        top--;
        return value;
    }
    //取出栈顶元素
    public int out(){
        if (isEmpty()){
            throw new RuntimeException("栈空,没有数据,无法进行取出栈顶元素操作");
        }
        return stack[top];
    }
    //清空栈
    public void clean(){
        top=-1;
    }
}
class Exchange{
    /*
    将一个十进制转化为其它进制,如二进制、八进制、十六进制
    num为待转换的值,target为待转化进制
     */
    Stack stack = new Stack(100000000);
    private int num;
    private int target;
    //初始化栈
    //构造器
    public Exchange(int num, int target) {
        this.num = num;
        this.target = target;
    }
    public void changeNum(int num, int target){
        //先判断num是否为零,0的任何进制都为零
        if (num==0){
            System.out.println(0);
        }else{
            while (num!=0){
                stack.push(num%target);//计算结果并入栈
                num/=target;
            }
            while (!stack.isEmpty()){//不是空栈,就输出
                if(stack.out()==10) { // 这里 处理 16进制 问题(还待 优化)
                    System.out.print("A");
                    int a = stack.pop(); // 这里意思是 弹出栈顶元素
                }else if(stack.out()==11){// peek() 方法 只获取 栈顶值 但不弹出
                    System.out.print("B");
                    int a = stack.pop();
                }else if(stack.out()==12){
                    System.out.print("C");
                    int a = stack.pop();
                }else if(stack.out()==13){
                    System.out.print("D");
                    int a = stack.pop();
                }else if(stack.out()==14){
                    System.out.print("E");
                    int a = stack.pop();
                }else if (stack.out()==15){
                    System.out.print("F");
                    int a = stack.pop();
                }else{
                    System.out.print(stack.pop());
                }
            }
        }
    }
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Len901

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值