数据结构&算法_栈(stack)
定义:
栈是一个先入后出的有序列表.
特点:
- 栈实现制线性表中元素的插入和删除只能在线性表的同一段进行的一种特殊线性表.允许插入和删除的一段,为变化的一端,我们称之为栈顶,另外一端为固定的一端我们称之为栈底
- 先放入的元素在栈底,最后放入的元素在栈顶,而删除元素刚好相反,最后放入的元素最先删除,最先放入的元素最后删除
java实现栈
package online.zcc815.stack;
import java.lang.reflect.Array;
/**
* Project DataStructures
* Package online.zcc815.stack
*
* @Description
* @Author ZCC
* @Email zcc815@126.com
* @Date 2020/6/22 22:25
* @Version 1.0.0
*/
public class ArrayStackDemo {
public static void main(String[] args) throws Exception {
//创建栈
StackDemo stack = new StackDemo(5);
stack.pop(1);
stack.pop(2);
stack.pop(3);
stack.pop(4);
stack.pop(5);
stack.printStack();
System.out.println("-------------");
//测试栈是否已经满了
//stack.pop(6);
//出栈
stack.push();
stack.printStack();
stack.push();
stack.push();
stack.push();
stack.push();
stack.printStack();
System.out.println("-------------");
}
}
class StackDemo{
private int maxSize; //栈的大小
private int[] stack ; //存储数据
private int top = -1 ; //栈顶
public StackDemo() {
}
public StackDemo(int maxSize) {
this.maxSize = maxSize;
stack = new int[maxSize];
}
public int getMaxSize() {
return maxSize;
}
public void setMaxSize(int maxSize) {
this.maxSize = maxSize;
}
public int[] getStack() {
return stack;
}
public void setStack(int[] stack) {
this.stack = stack;
}
//判断栈是否为null
public boolean isNull(){
return top == -1;
}
//判断栈是否满了
public boolean isFull(){
return maxSize==top+1;
}
//入栈操作
public void pop(int value){
//判断栈是否已经满了
if (isFull()){
System.out.println("栈已经满了");
return;
}
stack[top+1]=value;
top++;
}
//出栈操作
public int push() throws Exception {
//判断栈是否为null
if (isNull()){
throw new Exception("栈已经空");
}
top--;
return stack[top+1];
}
//打印栈中的数据
public void printStack() throws Exception {
//判断栈是否为null
if (isNull()){
throw new Exception("栈已经空");
}
for (int i = top; i >= 0; i--) {
System.out.println(stack[i]);
}
}
}