棧的數組實現

今天覆習下棧,自己寫一遍:
1.棧是限制插入和刪除只能在同一個位置上進行的表,該位置是表的末端叫做棧頂。棧有時也叫後進先出(LIFO)表,基本操作有pop(刪除)和push(插入)。
2.棧的數組實現:

package com.algith;

public class MyStack<T> {

        private int size;
        private T[] elements = null;
        private static final int DEFAULT_SIZE = 10;

        public MyStack(){
                clear();
        }

        public int size(){
                return size;
        }

        @SuppressWarnings("unchecked")
        public void clear(){
                size = 0;
                elements = (T[]) new Object[DEFAULT_SIZE];
        }

        public void push(T t){
                if(size==elements.length){
                        ensureCapacity(size*2+1);
                }
                elements[size++] = t;
        }

        public T pop(){
                if(size<1) return null;
                int topIndex = size - 1;
                T t = elements[topIndex];
                remove(topIndex);
                return t;
        }

        @SuppressWarnings("unchecked")
        public void ensureCapacity(int capacity){
                if(capacity<size)return;
                T[] oldElements = elements;
                elements = (T[]) new Object[capacity];
                for(int i=0;i<size;i++){
                        elements[i] = oldElements[i];
                }
        }

        public T remove(int index){
                if(index<0||index>size) 
                    throw new ArrayIndexOutOfBoundsException();
                T removeValue = elements[index];
                for(int i=index;i<size-1;i++){
                        elements[i] = elements[i+1];
                }
                size--;
                return removeValue;
        }

        public T get(int index){
                if(index<0||index>size) 
                    throw new ArrayIndexOutOfBoundsException();
                return elements[index];
        }

        public T set(int index,T newValue){
                if(index<0||index>size) 
                    throw new ArrayIndexOutOfBoundsException();
                T oldValue = elements[index];
                elements[index] = newValue;
                return oldValue;

        }

        public void print(){
                for(int u=0;u<size;u++){
                        System.out.println(elements[u]+",index"+u);
                }
        }

        public static void main(String[] args) {
                MyStack<Integer> stack = new MyStack<Integer>();
                for(int i=0;i<10;i++){
                        stack.push(i+12);
                }
                System.out.println(stack.size());
                System.out.println(stack.remove(1));
                System.out.println(stack.size());
                System.out.println(stack.pop());
                System.out.println(stack.size());
                stack.print();
        }
發佈了55 篇原創文章 · 獲贊 15 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章