1、栈
栈只允许访问一个数据项,即插入的最后一个数据项,移除这个数据项后才可以访问下一个,即插入的倒数第二个,一次类推。
生动的说就是,生活动常用的桶就是栈,先进后出,
2、java代码实现的栈
package com.zh.datastructurelearn;
/**
* @date: 2018/12/21 10:17
* 数据结构-栈
**/
public class StackOwn<T> {
private int maxSize;// 最大
private Object[] stackArray;// 数组
private int top;// 指针,指向当前数据,也可以是游标
public StackOwn(int maxSize) {
this.maxSize = maxSize;
this.stackArray = new Object[maxSize];
this.top = -1;
}
public void push(T obj) {
this.stackArray[++top] = obj;// 入栈
}
public T pop() {
if (isEmpty())
throw new ArrayIndexOutOfBoundsException(maxSize);
return (T) this.stackArray[top--];// 查看当前指向,并移动指针(游标)指向
}
public T peek() {
if (isEmpty())
throw new ArrayIndexOutOfBoundsException(maxSize);
return (T) this.stackArray[top];// 只是查看当前指向
}
public boolean isEmpty() {
return top == -1;
}
public boolean isFull() {
return top == maxSize - 1;// 是否满栈
}
}
测试用例:
package com.zh.datastructurelearn;
import com.zh.base.UserBean;
/**
* @date: 2018/12/21 10:34
**/
public class StackOwnTest {
public static void main(String[] args) {
StackOwn stackOwn = new StackOwn(10);
for (int i = 0; i < 10; i++) {
stackOwn.push("test1:" + i);
}
for (int i = 0; i < 10; i++) {
System.out.print(stackOwn.pop());
}
System.out.println();
StackOwn<UserBean> stackOwn1 = new StackOwn<>(5);
UserBean user = new UserBean();
user.setId(123);
stackOwn1.push(user);
UserBean userBean = stackOwn1.peek();
System.out.println(userBean.getId());
}
}
点点滴滴的积累就是成功,刚开始不一定一下就会,但是要有收获,在实际中去加深。