一、先说一下栈
1、什么是栈
栈是一种只允许在一端进插入或删除的线性表!( 什么是线性表?https://blog.csdn.net/qq_38401906/article/details/83715163 )
2、栈的特性?
先进后出
3、栈的存储结构?
顺序栈和链栈
二、java代码实现顺序栈的出栈、入栈(用数组实现)
package myStudy.dataStructure.day3;
import java.util.Arrays;
/**
*
* @description 栈(先进后出)
* @author shenrenfeng
* @date 2018年11月5日 下午9:25:56
*
*/
public class MyStack {
private Integer[] stacks;// 保存数据
private Integer top;// 栈顶
private Integer length;// 用于判断是否需要扩展数组
public MyStack() {
stacks = new Integer[10];
top = 0;
length = 10;
}
/**
* 入栈
*/
public void push(Integer data) {
if(stacks.length >= length) {
stacks = Arrays.copyOf(stacks, length + 10);// 每次扩展数组长度加10
length = length + 10;
stacks[top] = data;
} else {
stacks[top] = data;
}
top++;
}
/**
* 出栈
* @return
*/
public Integer pop() {
if(top > 0) {
return stacks[--top];
} else {
return null;// 之所以用Interger在出栈操作栈为空时可以返回null
}
}
/**
* 展示栈的数据(从栈顶开始)
*/
public void showMyStack() {
if(top > 0) {
for(int i = top-1; i >= 0; i--) {
System.out.print(stacks[i] + ",");
}
} else {
System.out.println("栈为空!");
}
}
}
测试一下
package myStudy.dataStructure.day3;
/**
*
* @description
* @author shenrenfeng
* @date 2018年11月5日 下午9:54:48
*
*/
public class Test {
public static void main(String[] args) {
MyStack myStack = new MyStack();
myStack.push(9);
myStack.push(8);
myStack.push(7);
myStack.push(6);
myStack.push(5);
myStack.push(4);
myStack.push(3);
myStack.push(2);
myStack.push(1);
myStack.push(0);
myStack.push(-1);
myStack.showMyStack();
System.out.println();
System.out.println(myStack.pop());
System.out.println(myStack.pop());
myStack.showMyStack();
}
}
结果: