Datasture-1 Stack--用Java实现

来源:互联网 发布:微博个性域名二次修改 编辑:程序博客网 时间:2024/05/25 08:15

1. 简单介绍

栈stack:是一种实现了后进先出的数据结构,LIFO(last in first out), 典型的方法是push()和pop()压栈和弹栈。

2. 代码实现

//Stack.javapackage com.fqyuan.stack;import java.lang.reflect.Array;public class Stack<T> {    private int size;    private int top;    private T[] stack;    @SuppressWarnings("unchecked")    public Stack() {        top = -1;        size = 50;        stack = (T[]) new Object[size];    }    public Stack(Class<T[]> clz, int size) {        top = -1;        this.size = size;        stack = clz.cast(Array.newInstance(clz.getComponentType(), size));    }    public boolean push(T item) {        if (isFull()) {            System.out.println("Error, the stack is full!");            return false;        } else {            stack[++top] = item;            return true;        }    }    public T pop() {        if (isEmpty()) {            System.out.println("Illegal operation, empty stack.");            return null;        } else {            return stack[top--];        }    }    public boolean isEmpty() {        return top == -1;    }    public boolean isFull() {        return top == stack.length - 1;    }}//Student.javapackage com.fqyuan.stack;public class Student {    private int id;    private String name;    public Student(int id, String name) {        this.id = id;        this.name = name;    }    @Override    public String toString() {        return "id: " + id + " name: " + name;    }}//TestStack.javapackage com.fqyuan.stack;import java.util.Random;public class TestStack {    public static void main(String[] args) {        // TODO Auto-generated method stub        // testInteger();        testPerson();    }    private static void testInteger() {        Random random = new Random();        Stack<Integer> s = new Stack<Integer>(Integer[].class, 15);        for (int i = 0; i < 10; i++) {            int val = random.nextInt(100);            System.out.print(val + " ");            s.push(val);        }        System.out.println();        while (!s.isEmpty()) {            System.out.print(s.pop() + " ");        }    }    private static void testPerson() {        Random random = new Random();        Stack<Student> s = new Stack<Student>(Student[].class, 10);        for (int i = 0; i < 10; i++) {            int val = random.nextInt(100);            System.out.print(val + " ");            Student stu = new Student(val, ("Student" + val));            s.push(stu);        }        System.out.println();        while (!s.isEmpty()) {            System.out.println(s.pop());        }    }}//Running result:9 47 89 70 67 14 32 86 14 80 id: 80 name: Student80id: 14 name: Student14id: 86 name: Student86id: 32 name: Student32id: 14 name: Student14id: 67 name: Student67id: 70 name: Student70id: 89 name: Student89id: 47 name: Student47id: 9 name: Student9