关于Java的栈的编程

      栈(stack)又名堆栈,它是一种运算受限的线性表。其限制是仅允许在表的一端进行插入和删除运算。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。

代码如下:

1、创建接口类

package org.nkty.trb.itf;
/**
 * 栈
 * @author Aitex
 * 线式存储
 */
public interface Stack {
/**
* 获取栈的大小
* @return int 栈的大小
*/
public int getSize();
/**
* 判断该栈是否为空
* @return 为空返回false,否则返回true 
*/
public boolean isEmpty();
/**
* 向栈中插入元素 e
* @param e 待插入的元素
*/
public void push(Object e);
/**
* 栈顶元素出栈
* @return 栈顶元素
*/
public Object pop();
/**
* 取出栈顶元素
* @return
*/
public Object peek();
}

2、实现接口

package org.nkty.trb.impl;
import org.nkty.trb.itf.Stack;
import MyException.MyStackException;
public class MyStack implements Stack{
private final int LEN = 8;//数组默认大小
private Object[] element;//数据元素数组
private int top;//栈顶指针 
public MyStack(){
top = -1;//
element = new Object[LEN];
}
@Override
public int getSize() {
// TODO Auto-generated method stub
return top+1;
}
@Override
public boolean isEmpty() {
// TODO Auto-generated method stub
return top<0;
}
@Override
public void push(Object e) {
// TODO Auto-generated method stub
int i = getSize();
if(i>element.length) expendSpace();
element[++top] = e;
}
/**
* 让数组自增
*/
    public void expendSpace(){
    Object [] a = new Object[element.length*2]; 
    for (int i = 0 ; i < element.length;i++ ) {
a[i] = element[i];
}
    element = a;
    }
@Override
public Object pop() {
// TODO Auto-generated method stub
if(getSize()<1) 
throw new MyStackException("错误!堆栈为空!");
Object obj = element[top];
element[top--] = null;
return obj;
}
@Override
public Object peek() {
// TODO Auto-generated method stub
if(getSize()<1) 
throw new MyStackException("错误!堆栈为空!");
return element[top];
}
}

3、自定义异常

package MyException;
public class MyStackException extends RuntimeException{
/**

*/
private static final long serialVersionUID = 1L;
public MyStackException(String err){
super(err);
}
}

4、例程

package TestDriver;
import org.nkty.trb.impl.MyStack;
public class Test1 {
public static void main(String[] args) {
baseConversion(16);
}
/**
* 计算二进制
* @param i
*/
public static void baseConversion(int i){
MyStack s = new MyStack();
while(i>0){
s.push(i%2+"");
i=i/2;
}
while(!s.isEmpty()) System.out.print(s.pop());
}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值