CFSDN nhấn mạnh vào giá trị tạo ra nguồn mở và chúng tôi cam kết xây dựng nền tảng chia sẻ tài nguyên để mọi nhân viên CNTT có thể tìm thấy thế giới tuyệt vời của bạn tại đây.
这篇CFSDN的博客文章java数据结构基础:栈由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
Sự chuẩn bị
工具:idea+jdk8 。
技术要求:java基础语法 。
编码环节
首先,我们得先确定下来,用什么数据来模拟栈的操作。由于是一个一个的元素放入栈里面,我们可以考虑用数组来实现.

以上是Java官方文档中的栈定义,我们也只需要实现三个方法:判断是否为空、移除栈顶对象、添加元素到栈的尾部 。
所以我们事先得定义一个数组:
数组定义好了之后呢,想想,我们怎么去获取到栈尾部或者栈首的元素呢?还记得数组的索引吗?可以用索引来假设为栈的指针。所以,我们还得定义好栈的元素个数和栈的默认长度以及默认的指针:
?
1
2
3
|
riêng tư
số nguyên
stackLength =
4
;
riêng tư
số nguyên
kích cỡ;
riêng tư
số nguyên
index = -
1
;
|
为什么这儿指向的是-1呢?我们知道,数组的第一个元素是索引为0,那么-1的意思就是不指向任何元素。待会儿我们在用的时候再去指向他.
然后,我们还得定义出数组的初始化。以及初始化的长度。参考官方文档的写法,当栈的长度满了之后我们就对栈长度进行1.5倍的扩容。我们就单独提取出一个方法来放置; 。
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
/**
* 数组初始化或者以1.5倍容量对数组扩容
*/
riêng tư
vô hiệu
capacity() {
nếu như
(
cái này
.arr ==
vô giá trị
) {
cái này
.arr =
mới
Sự vật[
cái này
.stackLength];
}
nếu như
(
cái này
.size - (
cái này
.stackLength -
1
) >=
0
) {
cái này
.stackLength =
cái này
.stackLength + (
cái này
.stackLength >>
1
);
cái này
.arr = Arrays.copyOf(
cái này
.arr,
cái này
.stackLength);
}
}
|
push方法
如何给栈添加元素?我们要考虑的地方:指针向右移动一位,也就是说指针要+1。其次,添加完元素之后,栈元素的长度发生了变化,size+1 .
?
1
2
3
4
5
6
7
8
9
|
công cộng
E push(E item){
cái này
.capacity();
cái này
.arr[++index] = item;
cái này
.size++;
trở lại
mục;
}
|
pop方法
pop方法主要是用来移除栈顶的元素.
先分析一下思路:我们要用index去指向栈顶的元素,该怎么去指定?
删除之后,对应的size长度该怎么去改变?
我们知道,当元素添加了之后,index会跟着改变,那么就好比我们添加了三个元素,此时的index应该就是指向的2。那就好办了.
当移除的时候,我们只需要让index–来操作就能解决问题;看代码:
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
/**
* 获取栈顶元素
*
* @trở lại
*/
công cộng
E pop() {
nếu như
(
cái này
.index == -
1
) {
ném
mới
EmptyStackException();
}
cái này
.size--;
Hệ thống.out.println(
"删除元素之前的当前下标:"
+index);
trở lại
(E)
cái này
.arr[index--];
}
|
empty方法
判断栈是否为空,这很简单。直接判断当前的size是不是0就能解决:
?
1
2
3
|
công cộng
Boolean
empty(){
trở lại
cái này
.index==
0
?
ĐÚNG VẬY
:
SAI
;
}
|
全部代码
?
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
|
bưu kiện
com.zxy;
nhập khẩu
java.util.Mảng;
nhập khẩu
java.util.EmptyStackException;
/**
* @Author Zxy
* @Date 2021/2/2 20:24
* @Version 1.0
* 演示栈容器的使用
*/
công cộng
lớp học
MyStack {
riêng tư
Object[] arr;
riêng tư
số nguyên
stackLength =
4
;
riêng tư
số nguyên
kích cỡ;
riêng tư
số nguyên
index = -
1
;
/**
* 判断栈容器是否为空
*/
công cộng
Boolean
empty() {
trở lại
cái này
.size ==
0
?
ĐÚNG VẬY
:
SAI
;
}
/**
* 获取栈顶元素
*
* @trở lại
*/
công cộng
E pop() {
nếu như
(
cái này
.index == -
1
) {
ném
mới
EmptyStackException();
}
cái này
.size--;
Hệ thống.out.println(
"删除元素之前的当前下标:"
+index);
trở lại
(E)
cái này
.arr[index--];
}
/**
* 向栈顶添加元素
*
* @param item
* @trở lại
*/
công cộng
E push(E item) {
cái này
.capacity();
Hệ thống.out.println(
"添加元素之前的下标:"
+index);
cái này
.arr[++index] = item;
Hệ thống.out.println(
"添加元素之后的下标:"
+index);
cái này
.size++;
trở lại
mục;
}
/**
* 数组初始化或者以1.5倍容量对数组扩容
*/
riêng tư
vô hiệu
capacity() {
nếu như
(
cái này
.arr ==
vô giá trị
) {
cái này
.arr =
mới
Sự vật[
cái này
.stackLength];
}
nếu như
(
cái này
.size - (
cái này
.stackLength -
1
) >=
0
) {
cái này
.stackLength =
cái này
.stackLength + (
cái này
.stackLength >>
1
);
cái này
.arr = Arrays.copyOf(
cái này
.arr,
cái này
.stackLength);
}
}
công cộng
tĩnh
vô hiệu
main(String[] args) {
MyStack stack =
mới
MyStack<>();
stack.push(
"Một"
);
stack.push(
"b"
);
stack.push(
"c"
);
System.out.println(stack.size);
Hệ thống.out.println(
"当前栈顶元素:"
+stack.pop());
}
}
|
Tóm tắt
本篇文章就到这里了,希望能给你带来帮助,也希望能够您能够关注我的更多内容! 。
原文链接:https://blog.csdn.net/weixin_43581288/article/details/113588790 。
最后此篇关于java数据结构基础:栈的文章就讲到这里了,如果你想了解更多关于java数据结构基础:栈的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
Tôi là một lập trình viên xuất sắc, rất giỏi!