1.简介

  • 栈(stack)又名堆栈,它是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。
  • img

2.基本算法

1
2
3
4
5
6
7
8
1.进栈(PUSH)算法
①若TOP≥n时,则给出溢出信息,作出错处理(进栈前首先检查栈是否已满,满则溢出;不满则作②);
②置TOP=TOP+1(栈指针加1,指向进栈地址);
③S(TOP)=X,结束(X为新进栈的元素);
2.退栈(POP)算法
①若TOP≤0,则给出下溢信息,作出错处理(退栈前先检查是否已为空栈, 空则下溢;不空则作②);
②X=S(TOP),(退栈后的元素赋给X):
③TOP=TOP-1,结束(栈指针减1,指向栈顶)。

3.项目实践

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
 package DataStructures.Stack;
/**
* @author yichangkong
* @create 2020-03-10-16:29
* <p>用数组模拟栈结构
*/
public class ArrayStackDemo {

public static void main(String[] args) {

//测试
//添加数据
ArrayStack stack = new ArrayStack(8);
stack.push(1);
stack.push(2);
stack.push(8);
stack.push(4);
stack.push(5);
stack.list();
}
static class ArrayStack {
private int maxSize;//栈的大小
private int[] stack;//数组模拟栈 测试数据放在数组
private int top = -1;
//构造器
public ArrayStack(int maxSize) {
this.maxSize = maxSize;
stack = new int[this.maxSize];
}
//判断是否栈满
public boolean ifFull() {
return top == maxSize - 1;
}
//判断栈是否为空
public boolean ifEmpty() {

return top == -1;
}

//入栈
public void push(int value) {

//判断是否栈满
if (ifFull()) return;
//添加
top++;
stack[top] = value;

}

//出栈 先入后出
public int pop() {

//判断是否kong
if (ifEmpty()) {
System.out.println("栈空 请插入数据进行测试");
return 0;
}
//try { return stack[top]; } finally { top--; }这个方法着实有些撒比了
//以为 show 和 pop两个之间的top会影响

int cur = top;

int value = stack[top];
top--;
return value;

}
//显示栈的情况 比如栈的size

public void list() {
if (ifEmpty()) {
System.out.println("栈空 请插入数据进行测试");
return;
}
for (int i = top; i > -1; i--) {

System.out.println(stack[i]);

}

}
}
}