本文主要是介绍数组实现栈,实现push,pop,size方法 -- 面试算法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
思考:
有几个关键的地方,
第一,数组的话,如果我们一直push,需要扩容.
第二,因为产生了扩容所以当前数组的大小,不代表存放的数据多少,所以我们需要一个count 表示当前的容量。
第三,扩容之后,要把之前的数据copy 到新的数组里面,并且要把数据放到新的数组里面。
实现:
package com.xinyu.test;public class Test27 {/*** 数组实现栈,实现push,pop,size方法*/public static void main(String[] args) {Stack stack = new Stack();stack.push(1);stack.push(2);stack.push(3);stack.push(4);stack.push(5);stack.push(6);System.out.println(stack.pop());System.out.println(stack.pop());System.out.println(stack.pop());System.out.println(stack.pop());System.out.println("----");System.out.println("size " + stack.size());System.out.println("----");System.out.println(stack.pop());System.out.println(stack.pop());System.out.println(stack.pop());System.out.println(stack.pop());}public static class Stack{private int[] arr;private int count;public Stack(){arr = new int[2];}public void push(int num){//容量需要扩容if(count >= arr.length){int[] arrNew = new int[count*2];
// System.arrayCopy(arrNew,arr,0,count,0,count);System.arraycopy(arr,0,arrNew,0,count);arr = arrNew;//arr[count++] = num;}else{arr[count++] = num;}}public int pop(){//这里应该是先--
// return arr[count--]; //--countif (count <= 0) {return -1;}return arr[--count]; //--count}public int size(){return count;}}}
注意:
* @param src the source array.* @param srcPos starting position in the source array.* @param dest the destination array.* @param destPos starting position in the destination data.* @param length the number of array elements to be copied.* @exception IndexOutOfBoundsException if copying would cause* access of data outside array bounds.* @exception ArrayStoreException if an element in the <code>src</code>* array could not be stored into the <code>dest</code> array* because of a type mismatch.* @exception NullPointerException if either <code>src</code> or* <code>dest</code> is <code>null</code>.*/public static native void arraycopy(Object src, int srcPos,Object dest, int destPos,int length);
arraycopy 的几个参数,我们需要熟悉一下。
src 表示源数组,srcPos 表示我从源数组的第几个位置copy
dest 表示目标数组,destPos 表示我要从dest数组的第几个位置开始粘贴
length 表示copy 的长度
这篇关于数组实现栈,实现push,pop,size方法 -- 面试算法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!