diff --git a/codes/kotlin/chapter_array_and_linkedlist/array.kt b/codes/kotlin/chapter_array_and_linkedlist/array.kt new file mode 100644 index 000000000..b9a04a985 --- /dev/null +++ b/codes/kotlin/chapter_array_and_linkedlist/array.kt @@ -0,0 +1,101 @@ +/** + * File: array.kt + * Created Time: 2024-01-25 + * Author: curtishd (1023632660@qq.com) + */ + +package chapter_array_and_linkedlist + +import java.util.concurrent.ThreadLocalRandom + +/* 随机访问元素 */ +fun randomAccess(nums: IntArray): Int { + // 在区间 [0, nums.size) 中随机抽取一个数字 + val randomIndex = ThreadLocalRandom.current().nextInt(0, nums.size) + // 获取并返回随机元素 + val randomNum = nums[randomIndex] + return randomNum +} + +/* 扩展数组长度 */ +fun extend(nums: IntArray, enlarge: Int): IntArray { + // 初始化一个扩展长度后的数组 + val res = IntArray(nums.size + enlarge) + // 将原数组中的所有元素复制到新数组 + for (i in nums.indices) { + res[i] = nums[i] + } + // 返回扩展后的新数组 + return res +} + +/* 在数组的索引 index 处插入元素 num */ +fun insert(nums: IntArray, num: Int, index: Int) { + // 把索引 index 以及之后的所有元素向后移动一位 + for (i in nums.size - 1 downTo index + 1) { + nums[i] = nums[i - 1] + } + // 将 num 赋给 index 处的元素 + nums[index] = num +} + +/* 删除索引 index 处的元素 */ +fun remove(nums: IntArray, index: Int) { + // 把索引 index 之后的所有元素向前移动一位 + for (i in index..(numbers) + println("列表 nums = $nums") + + /* 访问元素 */ + val num = nums[1] + println("访问索引 1 处的元素,得到 num = $num") + + /* 更新元素 */ + nums[1] = 0 + println("将索引 1 处的元素更新为 0 ,得到 nums = $nums") + + /* 清空列表 */ + nums.clear() + println("清空列表后 nums = $nums") + + /* 在尾部添加元素 */ + nums.add(1) + nums.add(3) + nums.add(2) + nums.add(5) + nums.add(4) + println("添加元素后 nums = $nums") + + /* 在中间插入元素 */ + nums.add(3, 6) + println("在索引 3 处插入数字 6 ,得到 nums = $nums") + + /* 删除元素 */ + nums.removeAt(3) + println("删除索引 3 处的元素,得到 nums = $nums") + + /* 通过索引遍历列表 */ + var count = 0 + for (i in nums.indices) { + count += nums[i] + } + + /* 直接遍历列表元素 */ + for (j in nums) { + count += j + } + + /* 拼接两个列表*/ + val nums1 = ArrayList(listOf(6, 8, 7, 10, 9)) + nums.addAll(nums1) + println("将列表 nums1 拼接到 nums 之后,得到 nums = $nums") + + /* 排序列表 */ + nums.sort() //排序后,列表元素从小到大排列 + println("排序列表后 nums = $nums") +} \ No newline at end of file diff --git a/codes/kotlin/chapter_array_and_linkedlist/my_list.kt b/codes/kotlin/chapter_array_and_linkedlist/my_list.kt new file mode 100644 index 000000000..3b917ce09 --- /dev/null +++ b/codes/kotlin/chapter_array_and_linkedlist/my_list.kt @@ -0,0 +1,139 @@ +/** + * File: my_list.kt + * Created Time: 2024-01-25 + * Author: curtishd (1023632660@qq.com) + */ + +package chapter_array_and_linkedlist + +/* 列表类 */ +class MyList { + private var arr: IntArray = intArrayOf() // 数组(存储列表元素) + private var capacity = 10 // 列表容量 + private var size = 0 // 列表长度(当前元素数量) + private var extendRatio = 2 // 每次列表扩容的倍数 + + /* 构造函数 */ + init { + arr = IntArray(capacity) + } + + /* 获取列表长度(当前元素数量) */ + fun size(): Int { + return size + } + + /* 获取列表容量 */ + fun capacity(): Int { + return capacity + } + + /* 访问元素 */ + fun get(index: Int): Int { + // 索引如果越界,则抛出异常,下同 + if (index < 0 || index >= size) + throw IndexOutOfBoundsException() + return arr[index] + } + + /* 更新元素 */ + fun set(index: Int, num: Int) { + if (index < 0 || index >= size) + throw IndexOutOfBoundsException("索引越界") + arr[index] = num + } + + /* 在尾部添加元素 */ + fun add(num: Int) { + // 元素数量超出容量时,触发扩容机制 + if (size == capacity()) + extendCapacity() + arr[size] = num + // 更新元素数量 + size++ + } + + /* 在中间插入元素 */ + fun insert(index: Int, num: Int) { + if (index < 0 || index >= size) + throw IndexOutOfBoundsException("索引越界") + // 元素数量超出容量时,触发扩容机制 + if (size == capacity()) + extendCapacity() + // 将索引 index 以及之后的元素都向后移动一位 + for (j in size - 1 downTo index) + arr[j + 1] = arr[j] + arr[index] = num + // 更新元素数量 + size++ + } + + /* 删除元素 */ + fun remove(index: Int): Int { + if (index < 0 || index >= size) + throw IndexOutOfBoundsException("索引越界") + val num: Int = arr[index] + // 将将索引 index 之后的元素都向前移动一位 + for (j in index..