dataQ = {} dataQ.first = 0 dataQ.last = -1 dataQ.data = {} function insert(q, val) q.last = q.last + 1 q.data[q.last] = val end function remove(q) if (q.first > q.last) then rval = -1 else print("remove: q.data[q.first]= ", q.data[q.first], " q.first= ", q.first) local rval = q.data[q.first] print("remove: rval= ", rval) q.data[q.first] = nil -- to allow garbage collection q.first = q.first + 1 print("remove: q.first= ", q.first) end return rval end insert(dataQ,"a") insert(dataQ,"b") insert(dataQ,"c") for i,v in ipairs(dataQ.data) do print(i, v) end repeat local x = remove(dataQ) print("list item= ", x) until (dataQ.first > dataQ.last) -- your code goes here