数据结构2—Java_栈_顺序存储

一、定义接口

package Statck;

public interface IStatck<T> {


    /**
     * 压栈
     * @param t
     */
    public void push(T t);

    /**
     * 弹栈
     */
    public T Pop();

    /**
     * 返回元素个数
     * @return
     */
    public int StackLength();

    /**
     * 清空栈
     */
    public void ClearStack();
}

二、自定义类

package Statck;

public class MStack<T> implements IStatck<T> {

    private int top=-1;
    Object[] objArray ;
    int MAX;

    /**
     * 构造函数,初始化数组大小
     * @param n
     */
    MStack(int n){
        MAX=n;
        objArray = new Object[MAX];

    }

    /**
     * 压栈
     */
    @Override
    public void push(T t) {
        if(top>=MAX-1){//top==Max-1时满栈
            throw new RuntimeException("超出栈上线");
        }else{
            top++;
            objArray[top]=t;

        }       
    }

    /**
     * 弹栈
     */
    @Override
    public T Pop() {
        if(top==-1){
            throw new RuntimeException("空栈,无法弹出元素");    
        }else{
            T t =(T)objArray[top];
            top--;
            return t;
        }   
    }

    /**
     * 长度
     */
    @Override
    public int StackLength() {

        return top+1;
    }

    @Override
    public void ClearStack() {
        if(top>-1){
            for(int i=0;i<top;i++){ 
                objArray[i]=null;
            }
        }
    }   
}

三、测试代码

package Statck;

import java.util.Random;


public class TestStack {

    MStack<Integer> stack ;

    final int MAXVALUE=15;
    Random r = new Random();

    public static void main(String[] args){
        TestStack ts = new TestStack();
        ts.initStack(10);
        ts.pushData();
    }


    /**
     * 初始化,
     * @param length 栈长度
     */
    private void initStack(int length){
        stack = new MStack<Integer>(length);
    }

    /**
     * 压栈——弹栈——显示
     */
    private void pushData(){

        int length = Math.abs(r.nextInt(MAXVALUE));//Math.abs()取绝对值
        try{
            System.out.println("压入元素:");
            for(int i=0;i<length;i++){
                int j =  Math.abs(r.nextInt(MAXVALUE));
                System.out.print(" "+j);
                stack.push(j);                      
            }
        }catch(Exception e){System.out.println(e.toString());}
        showStackData(stack);
    }

    /**
     * 显示
     * @param stack
     */
    private void showStackData(MStack<Integer> stack){

        System.out.println("");
        System.out.println("栈长:"+stack.StackLength());

        System.out.println("栈内元素为(出栈顺序):");

        int length = stack.StackLength();
        for(int i=0;i<length;i++){
            System.out.print(" "+stack.Pop());
        }               
    }
}

四、测试结果

压入元素:
13 10 3 3 9 7 3 12 4 10 10java.lang.RuntimeException: 超出栈上线

栈长:10
栈内元素为(出栈顺序):
10 4 12 3 7 9 3 3 10 13

top来指示栈顶元素在数组中的位置,top初始值为-1,表示栈为空,top=0表示已经有一个元素
(top==MAXSIZE-1)为栈满标志

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值