import java.util.Random;
/***
* 单任务下 栈操作
* @author ljx
*
*/
public class StackTest {
/**
* 创建一个栈
* @param size
* @return
*/
static Stack stack_create(int size){
Stack stack;
if(size == 0){
return null;
}
stack = new Stack(size);
if(stack != null){
stack.top = 0;
}
return stack;
}
/***
* 压栈
* @return
*/
static int stack_push(Stack stack,Integer data){
if(stack == null){
return 0;
}
//判断栈是否为满,满则增大一倍 ,数据过多需要消耗比较长的时间,分时性能不如链表
if(stack.top >= stack.MAX_SIZE - 1){
Stack newStack = new Stack(stack.MAX_SIZE * 2);
for(int i = 0;i<stack.MAX_SIZE;i++){
newStack.stack[i] = stack.stack[i];
}
newStack.top = stack.top;
stack = newStack;
}
stack.stack[stack.top] = data;
stack.top += 1;
return 1;
}
/***
* 弹出栈顶数据
* @param stack
*/
static Integer stack_pop(Stack stack){
Integer data;
if(stack == null || stack.top == 0){
return null;
}
stack.top -= 1;
data = stack.stack[stack.top];
return data;
}
/***
* 栈释放
* @param stack
*/
static void stack_destroy(Stack stack){
if(stack != null){
if(stack.stack != null){
for(int i =0;i<stack.top;i++){
stack.stack[i] = null;
}
}
}
stack = null;
}
/***
* 判断栈是否为空
* @param stack
* @return
*/
static Integer stack_isEmpty(Stack stack){
return stack.top;
}
public static void main(String args[]){
int size = 1000000;//1百万条数据
Random rand = new Random();
Stack stack = stack_create(size);
long start = System.currentTimeMillis();
//压
for(int i = 0;i<size;i++){
Integer randata = rand.nextInt(size);
//System.out.println("压入第"+i+"个随机数:"+randata);
stack_push(stack,randata);
}
//弹
for(int j = 0;j<size;j++){
Integer popdata = stack_pop(stack);
//System.out.println("弹出第"+j+"个随机数"+popdata);
}
long end = System.currentTimeMillis();
System.out.println("使用数组实现的栈随机压入1百万数据并且弹出需要"+(end - start)+"毫秒");
//释放
stack_destroy(stack);
}
}
class Stack{
Integer[] stack;
Integer top;
Integer MAX_SIZE;
Stack(){}
public Stack(Integer size){
this.stack = new Integer[size];
this.MAX_SIZE = size;
}
}