Lua初学习 9-14_03 数据结构 ---> 队列 (自己写的 跟书上差不多)

1:创建一个双向队列

list = { first =1,last = 0}

function list:pushFirst(value) --从头放入一个 value
local f = self.first-1 -- f=0
self[f] = value --self[0] = value
self.first =f -- self.f = 0
--print(self.first,f)
end

function list:pushLast(value) --从尾放入一个 value
local l= self.last+1
self[l] = value
self.last = l
end

function list:popFirst() --推出第一个value
if(self.first > self.last) then
print("警告 : 队列已经空了 ")
return nil
end
--print("进来时候 first index : ",self.first)
local v = self[self.first]
--print("推出来的first:",self[self.first])
self[self.first] = nil
self.first = self.first + 1
--print("list first index : ",self.first)
return v
end

function list:popLast() --推出最后一个value
if(self.first > self.last) then
print("警告 : 队列已经空了 ")
return nil
end
local v = self[self.last]
self[self.last] = nil
self.last =self.last-1
return v
end

list:pushFirst(11)
list:pushFirst(22)
list:pushFirst(33)
list:pushLast(44)
list:pushLast(55)
--从前放入3个 从后放入2个 33 22 11 44 55

print(list:popLast()) --last 55
list:pushLast(99) -- 33 22 11 44 99
list:pushFirst("orz") --orz" 33 22 11 44 99
print(list:popFirst()) --first orz

========接下来再推剩下的==========

print(list:popFirst()) --剩余5   ->orz
print(list:popFirst()) --剩余4       33
print(list:popFirst()) --剩余3       22
print(list:popFirst()) --剩余2       11
print(list:popFirst()) --剩余1       44
print(list:popFirst()) --剩余0       99
print(list:popFirst()) --剩余0       空警告

时间: 2024-10-12 01:15:19

Lua初学习 9-14_03 数据结构 ---> 队列 (自己写的 跟书上差不多)的相关文章

Lua初学习 9-14_01 数据结构 ---> 数组与矩阵

1:直接用table声明并初始化一个数组 arr = {1,2,3,4,5,6,7}       ------> index 从 1 开始 2:循环创建一个数组 arr = {} for i =1, 1000 do arr[i] =0 end ------>拿到数组长度 #arr(即时arr index从 -100 或者 99开始,#arr返回的都是1000)  这里的数组初始化value全部为0 3:创建一个矩阵 matrix = {} --声明一个 M 行 N 列的矩阵 for i = 1

数据结构学习总结 栈和队列

一,顺序栈的基本操作 同顺序表和链表一样,栈也是用来存储逻辑关系为 "一对一" 数据的线性存储结构,如图 1 所示.                                                               图 1 栈存储结构示意图 从图 1 我们看到,栈存储结构与之前所学的线性存储结构有所差异,这缘于栈对数据 "存" 和 "取" 的过程有特殊的要求: 1,栈只能从表的一端存取数据,另一端是封闭的,如图 1 所示

数据结构——队列,栈

队列 有时候,我们会遇到一些数字密码游戏,比如,给出一串数字: 4,6,8,3,5,2,2,6,0,解密规则是这样的,首先将第1个数删除,紧接着将第2个数字放到这串数的末尾,再将第3个数删除并将第4个数放到这串数的末尾,再将第5个数删除……如此往复,直到最后一个数也删除.按照刚才删除的顺序,将这些删除的数连在一起就是我们需要得到的目标数字.OK,这时候,拿出纸和笔,或者用一些小便签或者小卡片,将这9个数字分别写下来,开始模拟解密过程~ 其实解密的过程就像是将这些数进行排队,每次从最前面拿两个,第

lua 语句学习

版本:1.0 日期:2014.5.17 2014.6.1 版权:© 2014 kince 转载注明出处 在介绍SwitchButton之前,先来看一下系统Button是如何实现的.源码如下: @RemoteView public class Button extends TextView { public Button(Context context) { this(context, null); } public Button(Context context, AttributeSet att

lua指针学习

按照书上的例子,运行了下,lua指针关键就是3个值,指针函数,不变量,控制变量 function iter(a,i) --指针函数    i=i+1    local v=a[i]    if v then        return i,v    endend function isp(a)    --返回指针函数,不变量,控制变量    return iter,a,0end for k,v in isp({1,2,4}) do --控制变量是k,也就是指针函数返回的第1个赋值的变量    p

基本数据结构-队列的实现及其运用

二.队列 队列是一种先进先出的数据结构,元素只能添加到队尾,而对元素的删除,修改,检索只能在队头进行.与栈的差异是很明显的.同样队列的实现可以基于链表,也可以基于数组.和栈的基本操作差不多,但队列多了一个指针(标号)指向末尾的元素,因为需要在末尾插入元素. 1.队列的链表实现 #ifndef QUEUE_H #define QUEUE_H #include <iostream> template <class T> class queue { public: queue(); ~q

视图动画学习算法和数据结构(二)(&lt;Garry进阶(四)&gt;)

转载请注明: 接视图动画学习算法和数据结构(不定期更新)() 快速排序(QuickSort) 动画演示: java代码: public class QuickSort { private int array[]; private int length; public void sort(int[] inputArr) { if (inputArr == null || inputArr.length == 0) { return; } this.array = inputArr; length

数据结构—队列

数据结构-队列 1.队列的定义 队列(Queue)也是一种运算受限的线性表,它的运算限制与栈不同,是两头都有限制,插入只能在表的一端进行(只进不出),而删除只能在表的另一端进行(只出不进),允许插入的一端称为队尾(rear),允许删除的一端称为队头 (Front) 队列模型 2.队列的操作 队列的操作原则是先进先出的,所以队列又称作FIFO表(First in First out) 置空队:InitQueue(Q) 判队空:QueueEmpty(Q) 判队满:QueueFull(Q) 入队:En

java数据结构队列

队列类似于现实生活中的排队.队列是先进先出的原则,只允许在队列头部去除元素,队列尾部添加元素. 下面是分别用数组和链表为存储结构实现的队列 public interface Queue<T> { int size(); T remove(); void add(T element); boolean isEmpty(); void clear(); boolean hasElement(); } public class ArrayQueue<T> implements Queue