From 3782296de3b6d48f47c8b6f14859939e9311af63 Mon Sep 17 00:00:00 2001 From: sjinzh <99076655+sjinzh@users.noreply.github.com> Date: Sat, 14 Jan 2023 18:03:32 +0800 Subject: [PATCH] add zig codes for Section 'Hash Map', 'Binary Tree', 'Linear Search' --- codes/zig/build.zig | 14 ------ codes/zig/chapter_heap/heap.zig | 85 --------------------------------- 2 files changed, 99 deletions(-) delete mode 100644 codes/zig/chapter_heap/heap.zig diff --git a/codes/zig/build.zig b/codes/zig/build.zig index f66c559df..4299c60f2 100644 --- a/codes/zig/build.zig +++ b/codes/zig/build.zig @@ -188,20 +188,6 @@ pub fn build(b: *std.build.Builder) void { const run_step_binary_tree= b.step("run_binary_tree", "Run binary_tree"); run_step_binary_tree.dependOn(&run_cmd_binary_tree.step); - // Section: "Heap" - // Source File: "chapter_heap/heap.zig" - // Run Command: zig build run_heap - const exe_heap = b.addExecutable("heap", "chapter_heap/heap.zig"); - exe_heap.addPackagePath("include", "include/include.zig"); - exe_heap.setTarget(target); - exe_heap.setBuildMode(mode); - exe_heap.install(); - const run_cmd_heap = exe_heap.run(); - run_cmd_heap.step.dependOn(b.getInstallStep()); - if (b.args) |args| run_cmd_heap.addArgs(args); - const run_step_heap = b.step("run_heap", "Run heap"); - run_step_heap.dependOn(&run_cmd_heap.step); - // Section: "Linear Search" // Source File: "chapter_searching/linear_search.zig" // Run Command: zig build run_linear_search diff --git a/codes/zig/chapter_heap/heap.zig b/codes/zig/chapter_heap/heap.zig deleted file mode 100644 index 02e4ce8f1..000000000 --- a/codes/zig/chapter_heap/heap.zig +++ /dev/null @@ -1,85 +0,0 @@ -// File: heap.zig -// Created Time: 2023-01-14 -// Author: sjinzh (sjinzh@gmail.com) - -const std = @import("std"); -const inc = @import("include"); - -fn lessThan(context: void, a: i32, b: i32) std.math.Order { - _ = context; - return std.math.order(a, b); -} - -fn greaterThan(context: void, a: i32, b: i32) std.math.Order { - return lessThan(context, a, b).invert(); -} - -fn testPush(comptime T: type, mem_allocator: std.mem.Allocator, heap_push: anytype, val: T) !void { - var heap = heap_push; - try heap.add(val); //元素入堆 - std.debug.print("\n元素 {} 入堆后\n", .{val}); - try inc.PrintUtil.printHeap(T, mem_allocator, heap); -} - -fn testPop(comptime T: type, mem_allocator: std.mem.Allocator, heap_pop: anytype) !void { - var val = heap_pop.remove(); //堆顶元素出堆 - std.debug.print("\n堆顶元素 {} 出堆后\n", .{val}); - try inc.PrintUtil.printHeap(T, mem_allocator, heap_pop); -} - -// Driver Code -pub fn main() !void { - // 初始化内存分配器 - var mem_arena = std.heap.ArenaAllocator.init(std.heap.page_allocator); - // 延迟释放内存 - defer mem_arena.deinit(); - const mem_allocator = mem_arena.allocator(); - - // 初始化堆 - // 初始化小顶堆 - const PQlt = std.PriorityQueue(i32, void, lessThan); - var minHeap = PQlt.init(std.heap.page_allocator, {}); - defer minHeap.deinit(); - // 初始化大顶堆 - const PQgt = std.PriorityQueue(i32, void, greaterThan); - var maxHeap = PQgt.init(std.heap.page_allocator, {}); - defer maxHeap.deinit(); - - std.debug.print("\n以下测试样例为大顶堆", .{}); - - // 元素入堆 - try testPush(i32, mem_allocator, &maxHeap, 1); - try testPush(i32, mem_allocator, &maxHeap, 3); - try testPush(i32, mem_allocator, &maxHeap, 2); - try testPush(i32, mem_allocator, &maxHeap, 5); - try testPush(i32, mem_allocator, &maxHeap, 4); - - // 获取堆顶元素 - var peek = maxHeap.peek().?; - std.debug.print("\n堆顶元素为 {}\n", .{peek}); - - // 堆顶元素出堆 - try testPop(i32, mem_allocator, &maxHeap); - try testPop(i32, mem_allocator, &maxHeap); - try testPop(i32, mem_allocator, &maxHeap); - try testPop(i32, mem_allocator, &maxHeap); - try testPop(i32, mem_allocator, &maxHeap); - - // 获取堆的大小 - var size = maxHeap.len; - std.debug.print("\n堆元素数量为 {}", .{size}); - - // 判断堆是否为空 - var isEmpty = if (maxHeap.len == 0) true else false; - std.debug.print("\n堆是否为空 {}\n", .{isEmpty}); - - // 输入列表并建堆 - // 时间复杂度为 O(n) ,而非 O(nlogn) - try minHeap.addSlice(&[_]i32{ 1, 3, 2, 5, 4 }); - std.debug.print("\n输入列表并建立小顶堆后\n", .{}); - try inc.PrintUtil.printHeap(i32, mem_allocator, minHeap); - - const getchar = try std.io.getStdIn().reader().readByte(); - _ = getchar; -} -