1. 简单介绍
栈stack:是一种实现了后进先出的数据结构,LIFO(last in first out), 典型的方法是push()和pop()压栈和弹栈。
2. 代码实现
//Stack.java
package 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.java
package 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.java
package 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: Student80
id: 14 name: Student14
id: 86 name: Student86
id: 32 name: Student32
id: 14 name: Student14
id: 67 name: Student67
id: 70 name: Student70
id: 89 name: Student89
id: 47 name: Student47
id: 9 name: Student9