lua 栈,checkElement支持删除元素操作
来源:互联网 发布:家纺品牌 知乎 编辑:程序博客网 时间:2024/05/15 00:33
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 valueend--[[ @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 endend--[[ @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 endend--[[ @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 endendreturn Stack
0 0
- lua 栈,checkElement支持删除元素操作
- lua中删除元素
- lua table 元素删除
- lua中删除元素
- jq删除元素操作
- 支持对列表操作的栈(lua)
- lua删除table中的多个元素
- js数组元素删除操作
- lua 中删除table中的多个元素
- lua 删除key,value table中指定元素
- lua c 栈操作
- Lua栈操作详解
- Lua栈操作
- C++操作lua栈
- 删除顺序容器内元素的操作
- 顺序容器:删除元素的操作
- 堆删除最小元素的操作思路
- js中数组插入、删除元素操作
- hdu 1283 最简单的计算机
- UVA10177数出二维三维四维中的正方和矩方数
- maven的常用技巧
- 在Mac OS X 上 删除项目中所有.svn 文件
- ios使用TextField输入框
- lua 栈,checkElement支持删除元素操作
- oracle中多行增删改
- POJ 3974-Palindrome(Manacher算法)
- 用Python实现最速下降法求极值
- HDU 2435 There is a war(修改或添加一条边的最小割 )经典
- 支持ajax的爬虫
- 事件查看器ID 1041
- 微信开发总结 二
- Qt5.5 连接Access2007数据库