lua 栈,checkElement支持删除元素操作
2015-08-03 12:31
507 查看
lua 栈,checkElement支持删除元素操作
--[[ --Stack @author xiaowa @date 2015.5.17 --]] local Stack = Stack or class("Stack") function Stack:ctor() self.stack_ = nil self.stack_end_ = nil --栈末尾的元素 end --[[ @function 压入栈顶一个元素 @return Element#被压入的元素 --]] function Stack:pushElement(value) local ptr = self.stack_ if ptr then self.stack_end_.next = {} self.stack_end_.next.value = value self.stack_end_.next.prev = self.stack_end_ --双向表,这样pop就快 self.stack_end_ = self.stack_end_.next else --栈没有初始化 self.stack_ = {} self.stack_.value = value self.stack_end_ = self.stack_ end return value end --[[ @function 删除某个元素 @return Element#被删除的元素 --]] function Stack:delElement(value) assert(value ~= nil, string.format("%s:delElement() - invalid value", self.class.__cname)) local ptr = self.stack_ local ptr_prev while ptr do if ptr.value == value then if ptr_prev then ptr_prev.next = ptr.next if ptr.next then ptr.next.prev = ptr_prev end ptr.prev = nil ptr.next = nil else --删除第一个元素 self.stack_.next = ptr.next if ptr.next then ptr.next.prev = self.stack_ end ptr.prev = nil ptr.next = nil end return value end ptr_prev = ptr ptr = ptr.next end end --[[ @function 弹出元素 @return Element#value --]] function Stack:popElement() local ptr_prev ptr_prev = self.stack_end_.prev if ptr_prev then ptr_prev.next = nil self.stack_end_.prev = nil local value = self.stack_end_.value self.stack_end_ = ptr_prev return value else --self.stack_end_ 是第一个元素,就是只有1个元素了 self.stack_ = nil local value = self.stack_end_.value self.stack_end_ = nil return value end end --[[ @function 检查效果,检查函数中可以对栈进行操作,删除当前检查对象就会停止检查,删除其他对象仍会继续 @param function#检查函数,返回true 时停止检查 @return nil --]] function Stack:checkElement(fun) assert(type(fun) == "function", string.format("%s:checkElement() - invalid value", self.class.__cname)) local ptr = self.stack_ local ptr_prev while ptr do if(fun(ptr.value))then return end ptr_prev = ptr ptr = ptr.next end end return Stack
相关文章推荐
- lua 高效hashmap (没调试)
- 跟我一起了解Lua语言中的_index,newindex,rawget和rawset
- lua日常记录
- lua 模块开发
- lua实现继承、多态
- Lua 获取当前时间
- Lua简明入门实践(从"基"搞起)_(二)Lua基础语法
- Leetcode 150 Evaluate Reverse Polish Notation 反向波兰表示法求值
- Lua面向对象
- lua - 表
- lua 库函数
- Lua基本语法
- lua 介绍
- UVA 1609 Foul Play 不公平竞赛 (构(luan)造(gao)+递归)
- [leedcode 150] Evaluate Reverse Polish Notation
- 【Lua】table
- 【Lua】pairs 和 ipairs
- 逆波兰表达式求值(Evaluate Reverse Polish Notation)
- 【Lua】loadfile、dofile、require详解
- 【转】Lua编程规范