Lua实现的栈、队列

基于quick cocos2d-x2.2.5的API,写的一个栈,队列。满足游戏开发中的需求。

避免重复造车轮~(简单测试。留着自己用。不确定是否还存在bug)

栈Stack:

 1 --
 2 -- Date: 2014-11-19 15:29:02
 3 --
 4 local Stack = class("Stack")
 5
 6 function Stack:ctor()
 7     self.stack_table = {}
 8 end
 9
10 function Stack:push(element)
11     local size = self:size()
12     self.stack_table[size + 1] = element
13 end
14
15 function Stack:pop()
16     local size = self:size()
17     if self:isEmpty() then
18         printError("Error: Stack is empty!")
19         return
20     end
21     return table.remove(self.stack_table,size)
22 end
23
24 function Stack:top()
25     local size = self:size()
26     if self:isEmpty() then
27         printError("Error: Stack is empty!")
28         return
29     end
30     return self.stack_table[size]
31 end
32
33 function Stack:isEmpty()
34     local size = self:size()
35     if size == 0 then
36         return true
37     end
38     return false
39 end
40
41 function Stack:size()
42     return table.nums(self.stack_table) or 0
43 end
44
45 function Stack:clear()
46     -- body
47     self.stack_table = nil
48     self.stack_table = {}
49 end
50
51 function Stack:printElement()
52     local size = self:size()
53
54     if self:isEmpty() then
55         printError("Error: Stack is empty!")
56         return
57     end
58
59     local str = "{"..self.stack_table[size]
60     size = size - 1
61     while size > 0 do
62         str = str..", "..self.stack_table[size]
63         size = size - 1
64     end
65     str = str.."}"
66     print(str)
67 end
68
69
70 return Stack

队列Queue:

 1 --
 2 -- Date: 2014-11-19 16:51:19
 3 --
 4 local Queue = class("Queue")
 5
 6 function Queue:ctor(capacity)
 7     self.capacity = capacity
 8     self.queue = {}
 9     self.size_ = 0
10     self.head = -1
11     self.rear = -1
12 end
13
14 function Queue:enQueue(element)
15     if self.size_ == 0 then
16         self.head = 1
17         self.rear = 1
18         self.size_ = 1
19         self.queue[self.rear] = element
20     else
21         local temp = (self.rear + 1) % self.capacity
22         if temp == self.head then
23             printError("Error: capacity is full.")
24             return
25         else
26             self.rear = temp
27         end
28
29         self.queue[self.rear] = element
30         self.size_ = self.size_ + 1
31     end
32
33 end
34
35 function Queue:deQueue()
36     if self:isEmpty() then
37         printError("Error: The Queue is empty.")
38         return
39     end
40     self.size_ = self.size_ - 1
41     self.head = (self.head + 1) % self.capacity
42     local value = self.queue[self.head]
43     return value
44 end
45
46 function Queue:clear()
47     self.queue = nil
48     self.queue = {}
49     self.size_ = 0
50     self.head = -1
51     self.rear = -1
52 end
53
54 function Queue:isEmpty()
55     if self:size() == 0 then
56         return true
57     end
58     return false
59 end
60
61 function Queue:size()
62     return self.size_
63 end
64
65 function Queue:printElement()
66     local h = self.head
67     local r = self.rear
68     local str = nil
69     local first_flag = true
70     while h ~= r do
71         if first_flag == true then
72             str = "{"..self.queue[h]
73             h = (h + 1) % self.capacity
74             first_flag = false
75         else
76             str = str..","..self.queue[h]
77             h = (h + 1) % self.capacity
78         end
79     end
80     str = str..","..self.queue[r].."}"
81     print(str)
82 end
83
84 return Queue

======================================================

 1 --调用过程:
 2 local MainScene = class("MainScene", function()
 3     return display.newScene("MainScene")
 4 end)
 5
 6 local CURRENT_MODULE_NAME = ...
 7 local Queue = import("../datastruct/Queue", CURRENT_MODULE_NAME)
 8
 9 function MainScene:ctor()
10     local queue = Queue.new(5)
11     queue:enQueue("a")
12     queue:deQueue()
13     queue:enQueue("b")
14     queue:enQueue("c")
15     queue:enQueue("d")
16     queue:deQueue()
17     queue:deQueue()
18     queue:enQueue("e")
19     queue:enQueue("f")
20     queue:enQueue("g")
21     queue:deQueue()
22     queue:enQueue("h")
23     queue:enQueue("i")
24     queue:printElement()
25 end
26
27 function MainScene:onEnter()
28 end
29
30 function MainScene:onExit()
31 end
32
33 return MainScene

over~

时间: 2024-10-23 00:28:13

Lua实现的栈、队列的相关文章

<数据结构与算法分析 C++描述> 表/栈/队列

这一章主要内容: * 抽象数据类型(ADT)的概念 * 实现表/栈/队列 * 了解这三个数据结构的应用场景 1. ADT ADT: abstract data type, 是抽象的数学模型,在该模型上定义了一系列的操作.使用它的人,不需要了解它的存储方式,只关心它的逻辑特征.可以使用三元组的方法来表示(D,S,P),D是数据对象,S是数据之间的关系,P是对数据的基本操作,具体介绍,可以参考帖子:点击打开链接 2. 表ADT 表的数据自然是单个元素,而元素之间的关系是前驱与后继,操作包括查找/插入

栈&队列的简单实现

栈的定义---Stack 栈只允许在栈的末端进行插入和删除的线性表.栈具有先进后出的特性. 栈可用顺序表实现也可用链表实现. 但: 由于栈只能在末端进行操作,应使用顺序表实现. 用顺序表实现,有如下优点: (1)方便管理 (2)效率高 (3)cpu高速缓冲存取利用率高 实现如下: 测试如下: 队列的定义---Queue 队列只允许在队尾插入,队头删除.具有先进先出的特性. 队列的实现可用顺序表也可用链表. 若采用顺序表,删除时需要移动元素.为了操作方便,采取链表实现. 实现如下: 测试如下: 栈

【C/C++学院】0828-STL入门与简介/STL容器概念/容器迭代器仿函数算法STL概念例子/栈队列双端队列优先队列/数据结构堆的概念/红黑树容器

STL入门与简介 #include<iostream> #include <vector>//容器 #include<array>//数组 #include <algorithm>//算法 using namespace std; //实现一个类模板,专门实现打印的功能 template<class T> //类模板实现了方法 class myvectorprint { public: void operator ()(const T &

C语言栈队列实现二-十/二-八进制转换

C语言栈队列实现二-十/二-八进制转换 2015-04-05 Lover雪儿 1 //利用栈来求取二进制数的十进制与八进制的结果 2 #include <stdio.h> 3 #include <stdlib.h> 4 #include <math.h> 5 6 #define STACK_INIT_SIZE 20 //初始栈大小 7 #define STACK_INCREMENT 10 //扩充栈时每次增加的内存 8 9 typedef char ElemType;

java面向对象的栈 队列 优先级队列的比较

栈 队列 有序队列数据结构的生命周期比那些数据库类型的结构(比如链表,树)要短得多.在程序操作执行期间他们才被创建,通常用他们去执行某项特殊的任务:当完成任务之后,他们就会被销毁.这三个数据结构还有一个特点就是访问是受到限制的,即在特定时刻只有一个数据项可以被读取或者被删除,但是所谓的移除并不是真的删除,数据项依然在这些数据结构中,只不过因为指针已经指向其他数据项,没有办法访问到,当添加新的数据项时,当初移除的数据项被替代从而永远消失. 栈 队列 优先级队列的模拟思想 1.栈:栈遵循先进后出(F

java 集合 Connection 栈 队列 及一些常用

800x600 Normal 0 7.8 磅 0 2 false false false EN-US ZH-CN X-NONE MicrosoftInternetExplorer4 /* Style Definitions */ table.MsoNormalTable {mso-style-name:普通表格; mso-tstyle-rowband-size:0; mso-tstyle-colband-size:0; mso-style-noshow:yes; mso-style-priori

【C++】c++中栈 队列 的应用

C++中提供了STL模板statck 在使用的时候更为方便 除了一般的队列外 还有STL更有双向队列可以使用 #include<deque> 声明:deque <type > name 应用举例1:铁轨问题 Description There is a famous railway station in PopPush City. Country there is incredibly hilly. The station was built in last century. Un

【BZOJ2783】[JLOI2012]树 DFS+栈+队列

[BZOJ2783][JLOI2012]树 Description 在这个问题中,给定一个值S和一棵树.在树的每个节点有一个正整数,问有多少条路径的节点总和达到S.路径中节点的深度必须是升序的.假设节点1是根节点,根的深度是0,它的儿子节点的深度为1.路径不必一定从根节点开始. Input 第一行是两个整数N和S,其中N是树的节点数. 第二行是N个正整数,第i个整数表示节点i的正整数. 接下来的N-1行每行是2个整数x和y,表示y是x的儿子. Output 输出路径节点总和为S的路径数量. Sa

数据结构录 之 链表&amp;栈&amp;队列

三种基本的数据结构,来稍微说一下. 首先链表,这个几乎每本C++的语言书都会说的,直接看书上说的就好. 链表就是一个链,每一个都有一个指针指向下一个,然后这样串了起来.然后可以从头开始找,一直找到尾巴.然后对于某个数据点,都可以删除,只需要让他前面那个指向他后面那个,这样从头开始找的时候就找不到这个点了...在这个点之后添加一个点也是这样,直接让这个点指向那个新的,然后让新的指向原来这个点指向的后一个... 可以想象就是一个个点,然后第一个指向第二个,第二个指向第三个...就像是一条长长的链一样