This commit is contained in:
krahets
2023-03-13 22:40:57 +08:00
parent a2073d5f1a
commit ce8198e9e9
5 changed files with 71 additions and 84 deletions

View File

@@ -770,8 +770,8 @@ comments: true
return struct {
const Self = @This();
stackTop: ?*inc.ListNode(T) = null, // 将头结点作为栈顶
stkSize: usize = 0, // 栈的长度
stack_top: ?*inc.ListNode(T) = null, // 将头结点作为栈顶
stk_size: usize = 0, // 栈的长度
mem_arena: ?std.heap.ArenaAllocator = null,
mem_allocator: std.mem.Allocator = undefined, // 内存分配器
@@ -781,8 +781,8 @@ comments: true
self.mem_arena = std.heap.ArenaAllocator.init(allocator);
self.mem_allocator = self.mem_arena.?.allocator();
}
self.stackTop = null;
self.stkSize = 0;
self.stack_top = null;
self.stk_size = 0;
}
// 析构方法(释放内存)
@@ -793,7 +793,7 @@ comments: true
// 获取栈的长度
pub fn size(self: *Self) usize {
return self.stkSize;
return self.stk_size;
}
// 判断栈是否为空
@@ -802,31 +802,31 @@ comments: true
}
// 访问栈顶元素
pub fn top(self: *Self) T {
pub fn peek(self: *Self) T {
if (self.size() == 0) @panic("栈为空");
return self.stackTop.?.val;
return self.stack_top.?.val;
}
// 入栈
pub fn push(self: *Self, num: T) !void {
var node = try self.mem_allocator.create(inc.ListNode(T));
node.init(num);
node.next = self.stackTop;
self.stackTop = node;
self.stkSize += 1;
node.next = self.stack_top;
self.stack_top = node;
self.stk_size += 1;
}
// 出栈
pub fn pop(self: *Self) T {
var num = self.top();
self.stackTop = self.stackTop.?.next;
self.stkSize -= 1;
var num = self.peek();
self.stack_top = self.stack_top.?.next;
self.stk_size -= 1;
return num;
}
// 将栈转换为数组
pub fn toArray(self: *Self) ![]T {
var node = self.stackTop;
var node = self.stack_top;
var res = try self.mem_allocator.alloc(T, self.size());
std.mem.set(T, res, @as(T, 0));
var i: usize = 0;