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());
}
}
}
}
}
Java数据结构与算法之栈的相关操作(基本操作+进制转换)的小练习
最新推荐文章于 2023-03-23 00:57:15 发布