-
Notifications
You must be signed in to change notification settings - Fork 5
Expand file tree
/
Copy pathstack.rs
More file actions
117 lines (99 loc) · 1.85 KB
/
stack.rs
File metadata and controls
117 lines (99 loc) · 1.85 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
struct Stack {
top: usize,
size: usize,
data: Vec<i32>,
}
impl Stack {
// 创建栈
fn new(size: usize) -> Self {
Stack {
top: 0,
size,
data: vec![0; size],
}
}
// 打印栈中的所有元素
fn print_stack(&self) {
if self.is_empty() {
println!("栈为空");
return;
}
for i in 0..self.top {
print!("{} ", self.data[i]);
}
println!();
}
// 判断栈是否已满
fn is_full(&self) -> bool {
self.top == self.size
}
// 判断栈是否为空
fn is_empty(&self) -> bool {
self.top == 0
}
// 入栈操作
fn push(&mut self, value: i32) -> bool {
if self.is_full() {
return false;
}
self.data[self.top] = value;
self.top += 1;
true
}
// 出栈操作
fn pop(&mut self) -> i32 {
if self.is_empty() {
return 0;
}
self.top -= 1;
self.data[self.top]
}
// 清空栈
fn make_empty(&mut self) {
self.top = 0;
}
// 获取栈中元素的个数
fn len(&self) -> usize {
self.top
}
}
// 测试栈功能
fn test_stack() {
let mut s = Stack::new(5);
println!("执行入栈操作");
println!("入栈 1: {}", s.push(1));
s.print_stack();
println!("入栈 2: {}", s.push(2));
s.print_stack();
println!("栈的长度: {}", s.len());
println!("执行出栈操作");
println!("出栈: {}", s.pop());
s.print_stack();
println!("出栈: {}", s.pop());
s.print_stack();
println!("清空栈");
s.make_empty();
s.print_stack();
println!("测试结束");
}
fn main() {
test_stack();
}
/*
jarry@MacBook-Pro stack % rustc stack.rs
jarry@MacBook-Pro stack % ./stack
执行入栈操作
入栈 1: true
1
入栈 2: true
1 2
栈的长度: 2
执行出栈操作
出栈: 2
1
出栈: 1
栈为空
清空栈
栈为空
测试结束
*/