Skip to content

Commit 9c1df91

Browse files
committed
update
1 parent 2d62dac commit 9c1df91

File tree

2 files changed

+22
-29
lines changed

2 files changed

+22
-29
lines changed

zig/chapter_array_and_linkedlist/my_list.zig

Lines changed: 10 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -11,12 +11,12 @@ pub fn MyList(comptime T: type) type {
1111
return struct {
1212
const Self = @This();
1313

14-
nums: []T = undefined, // 数组(存储列表元素)
15-
numsCapacity: usize = 10, // 列表容量
16-
numSize: usize = 0, // 列表长度(即当前元素数量)
17-
extendRatio: usize = 2, // 每次列表扩容的倍数
14+
nums: []T = undefined, // 数组(存储列表元素)
15+
numsCapacity: usize = 10, // 列表容量
16+
numSize: usize = 0, // 列表长度(即当前元素数量)
17+
extendRatio: usize = 2, // 每次列表扩容的倍数
1818
mem_arena: ?std.heap.ArenaAllocator = null,
19-
mem_allocator: std.mem.Allocator = undefined, // 内存分配器
19+
mem_allocator: std.mem.Allocator = undefined, // 内存分配器
2020

2121
// 构造函数(分配内存+初始化列表)
2222
pub fn init(self: *Self, allocator: std.mem.Allocator) !void {
@@ -47,14 +47,14 @@ pub fn MyList(comptime T: type) type {
4747
// 访问元素
4848
pub fn get(self: *Self, index: usize) T {
4949
// 索引如果越界则抛出异常,下同
50-
if (index >= self.size()) @panic("索引越界");
50+
if (index < 0 or index >= self.size()) @panic("索引越界");
5151
return self.nums[index];
5252
}
5353

5454
// 更新元素
5555
pub fn set(self: *Self, index: usize, num: T) void {
5656
// 索引如果越界则抛出异常,下同
57-
if (index >= self.size()) @panic("索引越界");
57+
if (index < 0 or index >= self.size()) @panic("索引越界");
5858
self.nums[index] = num;
5959
}
6060

@@ -69,7 +69,7 @@ pub fn MyList(comptime T: type) type {
6969

7070
// 中间插入元素
7171
pub fn insert(self: *Self, index: usize, num: T) !void {
72-
if (index >= self.size()) @panic("索引越界");
72+
if (index < 0 or index >= self.size()) @panic("索引越界");
7373
// 元素数量超出容量时,触发扩容机制
7474
if (self.size() == self.capacity()) try self.extendCapacity();
7575
// 索引 i 以及之后的元素都向后移动一位
@@ -84,7 +84,7 @@ pub fn MyList(comptime T: type) type {
8484

8585
// 删除元素
8686
pub fn remove(self: *Self, index: usize) T {
87-
if (index >= self.size()) @panic("索引越界");
87+
if (index < 0 or index >= self.size()) @panic("索引越界");
8888
var num = self.nums[index];
8989
// 索引 i 之后的元素都向前移动一位
9090
var j = index;
@@ -125,10 +125,6 @@ pub fn MyList(comptime T: type) type {
125125

126126
// Driver Code
127127
pub fn main() !void {
128-
// 查看本地CPU架构和操作系统信息
129-
var native_target_info = try std.zig.system.NativeTargetInfo.detect(std.zig.CrossTarget{});
130-
std.debug.print("Native Info: CPU Arch = {}, OS = {}\n", .{native_target_info.target.cpu.arch, native_target_info.target.os.tag});
131-
132128
// 初始化列表
133129
var list = MyList(i32){};
134130
try list.init(std.heap.page_allocator);
@@ -176,5 +172,4 @@ pub fn main() !void {
176172
std.debug.print(" ,容量 = {} ,长度 = {}\n", .{list.capacity(), list.size()});
177173

178174
_ = try std.io.getStdIn().reader().readByte();
179-
}
180-
175+
}

zig/chapter_stack_and_queue/array_queue.zig

Lines changed: 12 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,8 @@ pub fn ArrayQueue(comptime T: type) type {
1212

1313
nums: []T = undefined, // 用于存储队列元素的数组
1414
cap: usize = 0, // 队列容量
15-
front: usize = 0, // 头指针,指向队首
16-
rear: usize = 0, // 尾指针,指向队尾 + 1
15+
front: usize = 0, // 队首指针,指向队首元素
16+
queSize: usize = 0, // 尾指针,指向队尾 + 1
1717
mem_arena: ?std.heap.ArenaAllocator = null,
1818
mem_allocator: std.mem.Allocator = undefined, // 内存分配器
1919

@@ -41,13 +41,12 @@ pub fn ArrayQueue(comptime T: type) type {
4141

4242
// 获取队列的长度
4343
pub fn size(self: *Self) usize {
44-
// 由于将数组看作为环形,可能 rear < front ,因此需要取余数
45-
return (self.capacity() + self.rear - self.front) % self.capacity();
44+
return self.queSize;
4645
}
4746

4847
// 判断队列是否为空
4948
pub fn isEmpty(self: *Self) bool {
50-
return self.rear == self.front;
49+
return self.queSize == 0;
5150
}
5251

5352
// 入队
@@ -56,17 +55,20 @@ pub fn ArrayQueue(comptime T: type) type {
5655
std.debug.print("队列已满\n", .{});
5756
return;
5857
}
58+
// 计算尾指针,指向队尾索引 + 1
59+
// 通过取余操作,实现 rear 越过数组尾部后回到头部
60+
var rear = (self.front + self.queSize) % self.capacity();
5961
// 尾结点后添加 num
60-
self.nums[self.rear] = num;
61-
// 尾指针向后移动一位,越过尾部后返回到数组头部
62-
self.rear = (self.rear + 1) % self.capacity();
62+
self.nums[rear] = num;
63+
self.queSize += 1;
6364
}
6465

6566
// 出队
6667
pub fn poll(self: *Self) T {
6768
var num = self.peek();
68-
// 队头指针向后移动一位,若越过尾部则返回到数组头部
69+
// 队首指针向后移动一位,若越过尾部则返回到数组头部
6970
self.front = (self.front + 1) % self.capacity();
71+
self.queSize -= 1;
7072
return num;
7173
}
7274

@@ -93,10 +95,6 @@ pub fn ArrayQueue(comptime T: type) type {
9395

9496
// Driver Code
9597
pub fn main() !void {
96-
// 查看本地CPU架构和操作系统信息
97-
var native_target_info = try std.zig.system.NativeTargetInfo.detect(std.zig.CrossTarget{});
98-
std.debug.print("Native Info: CPU Arch = {}, OS = {}\n", .{native_target_info.target.cpu.arch, native_target_info.target.os.tag});
99-
10098
// 初始化队列
10199
var capacity: usize = 10;
102100
var queue = ArrayQueue(i32){};
@@ -139,4 +137,4 @@ pub fn main() !void {
139137
}
140138

141139
_ = try std.io.getStdIn().reader().readByte();
142-
}
140+
}

0 commit comments

Comments
 (0)