版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/BaiHuaXiu123/article/details/88547468
1. 栈
通常所说的栈,是一种线性结构,在我们写程序也运用的比较广泛。
2. 栈的特点
后进先出,通俗点讲,栈的插入或者删除只能在表的"顶端"进行操作的线性表。
注:对于栈,表尾称之为栈顶(top);表头称之为栈低(bottom)
3.栈的操作
栈的基本操作:
1,栈的创建。 stackNew
2,压栈操作。 stackPush
3,得到栈顶的元素。 stackPop
4,计算栈的长度。 stackSize
5,清空一个栈。 stackEmpty
4. 栈的实现
//1.栈的定义
struct Stack<T> {
capacity: u32,
size: u32,
in_vec: Vec<T>
}
impl<T> Stack<T> {
//栈的创建
fn stackNew(u:u32)->Stack<T>{
Stack {
capacity: c,
size: 0,
in_vec: Vec::with_capacity(c as usize)
}
}
// 栈的大小
pub fn stackSize(&mut self)->i32{
self.size
}
// 压栈
pub fn stackPush(&mut self, value: T)->bool{
if self.size == self.capacity {
false
} else {
self.in_vec.push(value);
self.size += 1;
//Ok(&self.in_vec[(self.size - 1) as usize])
true
}
}
// 弹栈
pub fn stackPop(&mut self)-> Option<T>{
if self.size == 0 {
None
} else {
self.size -= 1;
self.in_vec.pop()
}
}
// 清空栈
pub fn stackEmpty(&mut self){
self.in_vec = vec![];
self.size = 0;
self.capacity = 0;
}
}
5. 栈的例子
LeetCode第20题,LeetCode之20-有效括号匹配
给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
注意空字符串可被认为是有效字符串。