`

数据结构应用回顾之Stack(一) 数制转换

 
阅读更多

    就是一种可以实现“先进后出(或者叫后进先出)”的线性数据结构,是普通线性结构的一个子集。他的特殊性在于他的操作受限,他只能够在表尾进行插入和删除操作的线性表,是数据“后进先出LIFO”,last in first out。 

    本文简单的实现了stack的基本操作,并写了一个数制转换的代码。

    

  stack 代码

   

package com.xx.dataStructure.stack;

public class Stack<T> {
	
	static final int defaultSize = 10;
	
	private Object [] data ;
	
	private int maxSize;
	
	private int top;
	
	public Stack(){
		this(defaultSize);
	}
	
	public Stack(int maxSize){
		this.maxSize = maxSize;
		data = new Object[maxSize];
	}
	
	public void init(){
		for(Object s : data){
			s = null;
		}
		top = 0;
	}
	
	public void clear(){
		while(!isEmpty()){
			try {
				pop();
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
	}
	
	public boolean isFull(){
		return (top == (maxSize - 1));
	}
	
	public boolean isEmpty(){
		return (top == 0 );
	}
	
	public Stack<T> push(T t) throws Exception{
		if (isFull()) {
			throw new Exception("StackOverFlow");
		}
		data[top] = t;
		top++;
		return this;
	}
	
	@SuppressWarnings("unchecked")
	public T pop() throws Exception {
		if (isEmpty())
			throw new Exception();
		top--;
		T t = (T)data[top];
		data[top] = null;
		return t;
	}
	
	public int getLength(){
		return top;
	}
	
	public void traverse(){
		for(int i = top -1 ; i >= 0; i --){
			System.out.print(data[i] + ",");
		}
		System.out.println("");
	}
	
	public static void main(String [] args){
		Stack<Integer> stack = new Stack<Integer>(5);
		stack.init();
		try {
			stack.push(1).push(2).push(3).push(4);
			stack.traverse();
			System.out.println(stack.getLength());
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
}

 

 

package com.xx.dataStructure.stack;

public class NumberTranslate {
	
	static Stack<Character> stack = new Stack<Character>(100);
	{
		stack.init();
	}
	
	static final Character [] CHAR =  {
		'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'
	};
	
	static final String NUMBRRSTRING = "0123456789ABCDEF";
	
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		try {
			System.out.println(trans10to8(10));
			System.out.println(trans10to16(160));
			System.out.println(trans16to10("FF"));
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	//分治法计算平方
	static long square(int x,int n){
		long result = 0L;
		if (n == 0) 
			return 1L;
		if (n == 1)
			return x;
		if (n % 2 == 0 ){
			long s = square(x,n/2);
			result =  s*s;
		}
		if (n % 2 == 1){
			long s = square(x,(n-1)/2);
			result = s*s*x;
		}
		return result;
	}
	
	static long trans16to10(String number) throws Exception {
		char[] ss = number.toCharArray();
		long result = 0;
		for(int i = 0; i < ss.length; i++){
			result += NUMBRRSTRING.indexOf(ss[i])*square(16,ss.length -i -1);
		}
		return result;
	}
	
	static String trans10to8(long number) throws Exception{
		long s = number;
		while(s / 8 > 0){
			stack.push(CHAR[(int)s%8]);
			s = s / 8;
		}
		s = s % 8 ;
		stack.push(CHAR[(int)s]);
		
		StringBuffer buf = new StringBuffer();
		while(!stack.isEmpty()){
			buf.append(stack.pop());
		}
		return buf.toString();
	}
	
	static String trans10to16(long number) throws Exception{
		long s = number;
		while(s / 16 > 0){
			stack.push(CHAR[ (int)s % 16]);
			s = s / 16;
		}
		stack.push(CHAR[ (int)s % 16]);
		StringBuffer buf = new StringBuffer();
		while(!stack.isEmpty()){
			buf.append(stack.pop());
		}
		return buf.toString();
	}
}

 

分享到:
评论

相关推荐

    数据结构 数制转换实验报告

    在C语言中,实现数制转换通常会用到数据结构——栈(Stack),它是一种后进先出(LIFO, Last In First Out)的数据结构。在这个实验中,栈被用来存储十进制数转换过程中的余数,从而逐步构建目标进制的数。 实验中...

    数据结构数制转换

    ### 数据结构数制转换 #### 知识点概述 本文将详细介绍如何利用C语言实现不同数制间的转换,包括十进制到二进制、八进制和十六进制的转换。通过具体代码示例,我们可以了解到栈这种数据结构在实际编程中的应用,并...

    数据结构:栈的应用-数制转换和括号匹配

    总之,栈作为一种简单但强大的数据结构,其在数制转换和括号匹配等应用场景中展现了极高的实用价值。通过深入理解栈的工作原理和应用方式,我们可以更好地解决计算机领域内的许多问题,提升代码的效率和质量。

    栈的应用----数制转换(C/C++)

    本程序利用栈(Stack)这一数据结构来实现数制转换,主要涉及十进制到其他进制(如八进制、十六进制)的转换。栈是一种具有后进先出(LIFO)特性的数据结构,适用于处理逆序处理的问题。 在给定的描述中,提到的...

    数据结构实现之数制转换

    数据结构实现之数制转换 数据结构实现之数制转换是指使用栈来实现十进制数向 R 进制数的转换。该实现需要使用 C 语言来编程,并且需要定义栈的顺序存储结构、栈的初始化、判断栈是否为空、入栈操作、出栈操作、数制...

    数据结构课程设计_用栈、数组等解决数制转换问题

    在这个数据结构课程设计中,我们聚焦于利用栈、数组等数据结构来解决数制转换的问题。栈是一种后进先出(LIFO)的数据结构,而数组则是一种线性数据结构,它们在处理数值转换时都有其独特的优势。 首先,我们要理解...

    用c语言中栈实现数制转换

    在《用C语言中栈实现数制转换》这一主题中,我们探讨了如何利用栈这种数据结构来实现从十进制到其他进制(如八进制)的转换。 ### 栈的概念 栈是一种特殊的线性数据结构,其特点是“后进先出”(LIFO,Last In ...

    数据结构学习——数制转换

    Stack S; cin&gt;&gt;S; cout输出栈:"(); */////////////////////////////////////////////////// char m,n; //选择输入进制 cout请选择输入数的进制!"; cout进制 "进制 "进制 "进制 "; do{ cin&gt;&gt;m; if(m!='...

    数制转换问题(完整).pdf

    5. Stack数据结构:文件中定义了一个栈(Stack)的数据结构,这是一个后进先出(LIFO)的数据结构。在计算机程序中,栈被广泛用于实现函数调用、撤销操作、算法中的递归调用等。栈的实现涉及到栈的初始化(InitStack...

    数据结构实验报告-栈进制转换.docx

    本实验报告旨在通过实现一个基于栈的数据结构来完成不同进制之间的转换,具体是从十进制转换为其他任意进制。通过本次实验,学生能够深入理解栈这一抽象数据类型的特点和应用,并掌握栈的基本操作方法。 #### 核心...

    用栈实现数制转换 c语言

    本文将详细介绍如何使用栈这种数据结构来实现十进制到二进制的转换,并通过C语言代码来具体展示这一过程。 #### 栈的基本概念 栈是一种后进先出(Last In First Out, LIFO)的数据结构,它只允许在一端(通常称为...

    C语言数据结构中数制转换实例代码

    在C语言中,数据结构和算法是编程的基础,其中数制转换是一个常见的操作。本文将深入探讨如何在C语言中实现数制转换的实例代码,特别是从十进制到其他进制(例如八进制)的转换。我们将通过分析提供的代码来理解其...

    C++实现的任意进制转换(数据结构——栈和队列)

    在实现过程中,可以使用标准库中的`std::stack`和`std::queue`来创建和管理数据结构,`std::stringstream`用于数字和字符串之间的转换,以及`std::pow`来计算基数的幂次。此外,利用C++的模板功能,可以让这个转换...

    链栈的基本操作,以数制转换为示例

    链栈是一种特殊的数据结构,它是栈(Last In, First Out, LIFO)的实现方式之一,但与数组实现的栈不同,链栈采用链表作为底层数据存储结构。在C语言中,我们可以利用结构体来定义链栈节点,并通过指针进行操作。本...

    用c++实现进制转换(栈的应用)

    在IT领域,进制转换是计算机科学中的...综上所述,本文通过详细的代码分析和理论解释,展示了如何在C++中利用栈数据结构高效地实现进制转换,不仅加深了对栈这一数据结构的理解,也提高了在实际编程中解决问题的能力。

    数据结构中的数值转换

    ### 数据结构中的数值转换 #### 实验背景与目标 本次实验的主题是“数据结构中的数值转换”,主要聚焦于如何利用栈这种数据结构实现不同进制数之间的转换。实验旨在加深学生对栈的理解,并掌握栈的基本操作,同时...

    利用顺序栈将一个非负的十进制整数N转换为对应的B进制数。

    ### 数据结构:栈与数制转换 #### 一、引言 在计算机科学领域,数制转换是一项基本而重要的操作。通常我们使用的十进制数系统,在计算机内部是以二进制形式存储和处理的。因此,掌握不同进制之间的转换方法对于理解...

    C++数据结构实现之Stack.zip

    在这个"C++数据结构实现之Stack"的压缩包中,我们主要关注的是栈(Stack)这一基本数据结构的C++实现。 栈是一种后进先出(Last In First Out, LIFO)的数据结构,它的操作类似于一个堆叠物品的过程,新添加的元素...

Global site tag (gtag.js) - Google Analytics