A simple intrusive Queue structure for Zig
1const std = @import("std"); 2const Queue = @This(); 3 4start: ?*Node = null, 5end: ?*Node = null, 6 7pub const Node = struct { 8 next: ?*Node = null, 9}; 10 11pub fn enqueue(self: *Queue, new_node: *Node) void { 12 if (self.end) |end| { 13 end.next = new_node; 14 } else { 15 self.start = new_node; 16 } 17 self.end = new_node; 18} 19 20pub fn dequeue(self: *Queue) ?*Node { 21 const start = self.start orelse return null; 22 if (start.next) |next| { 23 self.start = next; 24 } else { 25 self.start = null; 26 self.end = null; 27 } 28 return start; 29}