概念:
栈(stack)又名堆栈,它是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。(百度百科)
我的理解:栈就是一种数据结构,具有先进后出的特点,栈并不是为了数据存储而存在的,而是为了处理某些 特定的数据(不喜勿喷)。栈具有出栈和入栈的操作,以下是我对栈的理解图(画的不好请理解),栈就和装箱子一样类似,最先装进箱子的最后取出来:
以下是对栈的具体代码实现:
package stack;
/**
* 栈的使用
*
* @author ljy
* @date 2020/5/9 15:20
*/
public class Stack {
//栈的大小
private int size;
//栈顶元素的下标,空栈时为-1
private int top;
//栈存储,数组
private int[]stackArray;
/**
* 构造函数,初始化栈
*
* @param size
* @return {@link }
* @author ljy
* @date 2020/5/9
*/
public Stack(int size) {
stackArray =new int[size];
top = -1;
this.size = size;
}
/**
* 判断栈是否为满的
*
* @return {@link boolean}
* @author ljy
* @date 2020/5/9
*/
public boolean isFull() {
return top ==size -1;
}
/**
* 判断栈是否为空的
*
* @return
*/
public boolean isEmpty() {
return top == -1;
}
/**
* 入栈,先要判断栈是否已满
*
* @param elem
*/
public void push(int elem) {
if (!isFull()) {
top++;
stackArray[top] = elem;
System.out.println("元素:" + elem +"入栈");
}else {
System.out.println("栈空间已满,无法进行入栈操作!");
}
}
/**
* 出栈,先进行判空
*
* @return
* @author ljy
* @date 2020/5/9
*/
public int pop() {
if (!isEmpty()) {
System.out.println("元素:" +stackArray[top] +"出栈");
return stackArray[top--];
}else {
System.out.println("栈为空,无法进行出栈操作!");
return -1;
}
}
/**
* 查看栈内容
*
* @return
* @author ljy
* @date 2020/5/9
*/
public void getStack() {
String result ="";
for (int i =0; i <=top ; i++) {
result = result +stackArray[i] +"->";
}
int index = result.lastIndexOf("->");
result = result.substring(0, index);
System.out.println("当前栈类元素:" + result);
}
}
mian函数:
package stack;
/**
* @author ljy
* @date 2020/5/9 15:20
*/
public class StackMain {
public static void main(String[] args) {
Stack stack =new Stack(8);
stack.push(7);
stack.push(5);
stack.getStack();
stack.pop();
stack.push(10);
stack.push(110);
stack.push(1220);
stack.getStack();
stack.pop();
stack.getStack();
}
}