一、简单介绍
今天我就给大家带来java中的链栈实现进制转换的方法,该方法也是在学习栈的时候发现的,我们都知道在进制转换的时候有很多种方法,其中最常用也最容易理解的就是除基倒取余法,那么我们先来说说其原理构成。
以转二进制为例,输入一个数n,每次用n除以2,把余数记下来,再用商去除以2......依次循环。直到商为0时结束,然后把余数倒着排列,就构成了转换后的二进制数,同样的道理,十进制转八进制、十六进制等。(这里少写了个0,最后换算结果是10001)
二、实现原理
java顺序栈只允许在一端进行插入、删除和出栈,只允许操作的一段称为栈顶,另一端称为栈尾,运用这个特性我们可以知道,栈内元素是遵循先入后出,后入先出的原则,所以将依次计算的余数入栈,最后依次出栈,即可完成进制转换。
三、下面创建java顺序栈的代码
1.创建一个SStack接口,添加判空isEmpty(),出栈puch(),入栈pop()方法。
public interface SStack<E> {
public boolean isEmpty();
public boolean push(E isEmpty);
public E pop();
}
·2.创建一个 Node类,设置指针域和数据域。
public class Node<E> {
public E data;
public Node<E> next;
public Node(E data,Node<E> node)
{
this.data = data;
this.next = node;
}
public Node(E data)
{
this(data,null);
}
public Node()
{
this(null,null);
}
}
3.创建LinkedStackl类继承SStack接口,并实现未实现的方法。
public class LinkedStack<E> implements SStack<E> {
private Node<E> top;//栈顶指针
public boolean isEmpty() {
return this.top == null?true:false;
}
@Override
public boolean push(E element) {
boolean flag = false;
if (element != null){
this.top = new Node<E>(element,this.top);
flag = true;
}
return flag;
}
@Override
public E pop() {
E poped = null;
if (! this.isEmpty()){
poped = this.top.data;
this.top = this.top.next;
}
return poped;
}
}
4.创建测试类ConvertNumber,num为传入换算参数,创建workStack工作栈,运用resStr接收出栈元素,最后返回。
public class ConvertNumber {
//转二进制
private static String toBinary(int num) {
StringBuffer resStr = new StringBuffer();
SStack<String> workStack = new LinkedStack<String>();
String str = "";
for (int i = num;i > 0;i/=2){
str = i % 2+str;
workStack.push(str);
}
resStr.append(workStack.pop());
return resStr.toString();
}
//转八进制
private static String toHex(int num) {
StringBuffer resStr = new StringBuffer();
SStack<String> workStack = new LinkedStack<String>();
String str = "";
for (int i = num;i > 0;i/=8){
str = i % 8+str;
workStack.push(str);
}
resStr.append(workStack.pop());
return resStr.toString();
}
//转十六进制
private static String toOctonary(int num) {
StringBuffer resStr = new StringBuffer();
SStack<String> workStack = new LinkedStack<String>();
String str = "";
for (int i = num;i > 0;i/=16){
str = i % 16+str;
workStack.push(str);
}
resStr.append(workStack.pop());
return resStr.toString();
}
public static void main(String[] args) {
System.out.println(toBinary(17));
System.out.println(toHex(17));
System.out.println(toOctonary(17));
}
}
5.测试结果
总体来说也是一个很不错的学习实用点,当然也会有更方便的方式来进行进制换算,以上文章仅仅用于分享,这也是本人第一次发文章请各位读者大大点个赞支持哦。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)