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 = 0
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~