您的位置:首页 > 其它

栈的数组实现

2016-01-07 15:36 267 查看
今天复习下栈,自己写一遍:

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();
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: