add zig codes for Section 'Hash Map' and 'Linear Search'

This commit is contained in:
sjinzh 2023-01-13 23:23:26 +08:00
parent 71a56f94c8
commit 722fb71bdd
4 changed files with 87 additions and 2 deletions

View file

@ -174,6 +174,20 @@ pub fn build(b: *std.build.Builder) void {
const run_step_hash_map= b.step("run_hash_map", "Run hash_map"); const run_step_hash_map= b.step("run_hash_map", "Run hash_map");
run_step_hash_map.dependOn(&run_cmd_hash_map.step); run_step_hash_map.dependOn(&run_cmd_hash_map.step);
// Section: "Linear Search"
// Source File: "chapter_searching/linear_search.zig"
// Run Command: zig build run_linear_search
const exe_linear_search = b.addExecutable("linear_search", "chapter_searching/linear_search.zig");
exe_linear_search.addPackagePath("include", "include/include.zig");
exe_linear_search.setTarget(target);
exe_linear_search.setBuildMode(mode);
exe_linear_search.install();
const run_cmd_linear_search = exe_linear_search.run();
run_cmd_linear_search.step.dependOn(b.getInstallStep());
if (b.args) |args| run_cmd_linear_search.addArgs(args);
const run_step_linear_search= b.step("run_linear_search", "Run linear_search");
run_step_linear_search.dependOn(&run_cmd_linear_search.step);
// Section: "Bubble Sort" // Section: "Bubble Sort"
// Source File: "chapter_sorting/bubble_sort.zig" // Source File: "chapter_sorting/bubble_sort.zig"
// Run Command: zig build run_bubble_sort // Run Command: zig build run_bubble_sort

View file

@ -0,0 +1,55 @@
// File: linear_search.zig
// Created Time: 2023-01-13
// Author: sjinzh (sjinzh@gmail.com)
const std = @import("std");
const inc = @import("include");
// 线
fn linearSearchList(comptime T: type, nums: std.ArrayList(T), target: T) T {
//
for (nums.items) |num, i| {
//
if (num == target) {
return @intCast(T, i);
}
}
// -1
return -1;
}
// 线
pub fn linearSearchLinkedList(comptime T: type, node: ?*inc.ListNode(T), target: T) ?*inc.ListNode(T) {
var head = node;
//
while (head != null) {
//
if (head.?.val == target) return head;
head = head.?.next;
}
return null;
}
// Driver Code
pub fn main() !void {
var target: i32 = 3;
// 线
var nums = std.ArrayList(i32).init(std.heap.page_allocator);
defer nums.deinit();
try nums.appendSlice(&[_]i32{ 1, 5, 3, 2, 4, 7, 5, 9, 10, 8 });
var index = linearSearchList(i32, nums, target);
std.debug.print("目标元素 3 的索引 = {}\n", .{index});
// 线
var mem_arena = std.heap.ArenaAllocator.init(std.heap.page_allocator);
defer mem_arena.deinit();
const mem_allocator = mem_arena.allocator();
var head = try inc.ListUtil.listToLinkedList(i32, mem_allocator, nums);
var node = linearSearchLinkedList(i32, head, target);
std.debug.print("目标结点值 3 的对应结点对象为 {any}", .{node});
const getchar = try std.io.getStdIn().reader().readByte();
_ = getchar;
}

View file

@ -18,4 +18,18 @@ pub fn ListNode(comptime T: type) type {
self.val = x; self.val = x;
} }
}; };
}
// Generate a linked list with a list
pub fn listToLinkedList(comptime T: type, mem_allocator: std.mem.Allocator, list: std.ArrayList(T)) !?*ListNode(T) {
var dum = try mem_allocator.create(ListNode(T));
dum.init(0);
var head = dum;
for (list.items) |val| {
var tmp = try mem_allocator.create(ListNode(T));
tmp.init(val);
head.next = tmp;
head = head.next.?;
}
return dum.next;
} }

View file

@ -3,5 +3,7 @@
// Author: sjinzh (sjinzh@gmail.com) // Author: sjinzh (sjinzh@gmail.com)
pub const PrintUtil = @import("PrintUtil.zig"); pub const PrintUtil = @import("PrintUtil.zig");
pub const ListNode = @import("ListNode.zig").ListNode; pub const ListUtil = @import("ListNode.zig");
pub const TreeNode = @import("TreeNode.zig").TreeNode; pub const ListNode = ListUtil.ListNode;
pub const TreeUtil = @import("TreeNode.zig");
pub const TreeNode = TreeUtil.TreeNode;