-
Notifications
You must be signed in to change notification settings - Fork 14
Expand file tree
/
Copy pathStack.java
More file actions
130 lines (106 loc) · 3.03 KB
/
Stack.java
File metadata and controls
130 lines (106 loc) · 3.03 KB
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
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
/**
* Copyright © https://github.com/microwind All rights reserved.
* @author: jarryli@gmail.com
* @version: 1.0
* @description: 栈数据结构 - Java实现
*/
public class Stack {
private int top; // 栈顶指针
private int size; // 栈的最大容量
private int[] dataArray; // 存储栈元素的数组
// 构造函数,动态创建栈并设置栈的最大容量
public Stack(int size) {
this.size = size;
this.dataArray = new int[size]; // 为栈分配存储空间
this.top = 0; // 初始化栈顶指针为 0
}
// 打印栈中的所有元素
public void printStack() {
if (isEmpty()) {
System.out.println("栈为空");
return;
}
for (int i = 0; i < top; i++) {
System.out.print(dataArray[i] + " "); // 打印栈中的每个元素
}
System.out.println();
}
// 判断栈是否已满
public boolean isFull() {
return top == size; // 如果栈顶指针等于栈的最大容量,表示栈已满
}
// 判断栈是否为空
public boolean isEmpty() {
return top == 0; // 如果栈顶指针为 0,表示栈为空
}
// 入栈操作,将元素压入栈顶
public boolean push(int data) {
if (isFull()) { // 如果栈已满,返回 false
return false;
}
dataArray[top++] = data; // 将数据压入栈顶,栈顶指针加 1
return true;
}
// 出栈操作,返回栈顶元素并移除它
public int pop() {
if (isEmpty()) { // 如果栈为空,返回 0(假定 0 为无效值)
return 0;
}
return dataArray[--top]; // 将栈顶指针减 1,返回栈顶元素
}
// 清空栈,将栈顶指针设置为 0
public void makeEmpty() {
top = 0; // 清空栈中的所有元素
}
// 获取栈的当前元素个数
public int len() {
return top; // 栈顶指针即为栈中元素的数量
}
// 测试栈的功能
public static void testStack() {
Stack s = new Stack(5); // 创建一个容量为 5 的栈
System.out.println("执行入栈操作");
// 测试入栈
System.out.println("入栈 1: " + (s.push(1) ? "成功" : "失败"));
s.printStack();
System.out.println("入栈 2: " + (s.push(2) ? "成功" : "失败"));
s.printStack();
// 测试出栈
System.out.println("执行出栈操作");
System.out.println("出栈: " + s.pop());
s.printStack();
System.out.println("出栈: " + s.pop());
s.printStack();
// 测试栈为空的情况
System.out.println("出栈: " + s.pop());
s.printStack();
// 测试清空栈
System.out.println("清空栈");
s.makeEmpty();
s.printStack();
System.out.println("测试结束。");
}
// 主函数
public static void main(String[] args) {
testStack(); // 调用测试栈的函数
}
}
/*
* jarry@MacBook-Pro stack % javac Stack.java
* jarry@MacBook-Pro stack % java Stack
* 执行入栈操作
* 入栈 1: 成功
* 1
* 入栈 2: 成功
* 1 2
* 执行出栈操作
* 出栈: 2
* 1
* 出栈: 1
* 栈为空
* 出栈: 0
* 栈为空
* 清空栈
* 栈为空
* 测试结束。
*/