ArrayStack成员和各个方法实现

本文详细介绍了一个基于数组实现的栈(ArrayStack)的数据结构及其核心方法,包括push、pop、peek等操作,并提供了完整的Java代码实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ArrayStack成员和各个方法实现

有了ArrayList的实现,实现ArrayStack好多了。

 

public void push(Telement);              需要数组 T[],容量,增量,栈顶

    public T pop();                               需要数组 T[]

    public T peek();                              需要数组 T[]

    public boolean isEmpty();                     需要栈顶

    public int size();                            需要栈顶

    public Iterator<T> itorator();                需要数组 T[]

    public String toString();                     需要数组 T[]

 

成员可以定义4个如下:

public class ArrayStack<T> implements StackADT<T> {

 

    private final int DEFAULT_CAPACITY = 100;

    private final int INCREMENT=10;

    private T[] stack;

    private int top;

       ….

}

 

方法的实现

 

构造方法

@SuppressWarnings("unchecked")

    public ArrayStack(){

       //stack = newT[DEFAULT_CAPCITY];

       stack = (T[])(new Object[DEFAULT_CAPACITY]);

       top = 0;

    }

Push方法:异常情况是栈满

@Override

    public void push(T element) {

           if(stack.length == top)

           expandCapacity();

       stack[top] = element;

       top ++;

    }

    private void expandCapacity() {   

       stack = Arrays.copyOf(stack, stack.length+INCREMENT);

    }

 

其他方法也相对比较简单。注意,top就是栈中实际元素的数量

@Override

    public T pop() {

       if(isEmpty())

           throw new EmptyCollectionException("the stack is empty!");

       top--;

       T result = stack[top];

       stack[top] = null;

       return result;

    }

 

    @Override

    public T peek() {

       if(isEmpty())

           throw new EmptyCollectionException("the stack is empty!");

       return stack[top-1];

    }

 

    @Override

    public boolean isEmpty() {

       if(0== size())

           return true;

       else

       return false;

    }

 

    @Override

    public int size() {

       return top;

    }

 

迭代的实现。和ArrayList的实现方法差不多。总是就是2个方法而已,一个问“有没有下个了”,如果有,那么另一个方法就“返回下一个”。

@Override

    public Iterator<T> iterator() {

       return new ArrayStackIterator();

    }

   

    private class ArrayStackIterator<T> implementsIterator<T>{

       int pointer = -1;

       @Override

       public boolean hasNext() {//有没有下一个?

           if(pointer < top-1)

              return true;

           else

              return false;

       }

       @Override

       public T next() {//返回下一个

           pointer++;

           return (T) stack[pointer];

       }

      

    }

    public String toString(){

       //调用了iterator,然后把元素的toString累计到一起就行了。每个人都会。。

       Iterator<T> it  =  iterator();

       StringBuilder sb = new StringBuilder();

       while(it.hasNext()){

           sb.append(it.next().toString()+"\n");        

       }

       return sb.toString();      

    }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值