mirror of
https://github.com/krahets/hello-algo.git
synced 2024-12-26 12:56:32 +08:00
e0a3189f91
3 changes: 1. In the enlarge part, I didn't change because I didn't find a good way to deal with the local variable and the clear definition. malloc is commonly used in LeetCode so I think it is not bad for a beginner. 2. I changed the initialization of the second array to make it in the same style as C++. 3. In the enlarge part in main, I deleted the code of pointer free to match the array operations. I also changed the operate array in the later part because the enlarged array cannot be assigned to the older array name. BTW, sorry for updating so late. Reading different version documents and book are really tiring and boring.
112 lines
2.9 KiB
C
112 lines
2.9 KiB
C
/*
|
|
* File: array.c
|
|
* Created Time: 2022-12-20
|
|
* Author: MolDuM (moldum@163.com)
|
|
*/
|
|
|
|
#include "../include/include.h"
|
|
|
|
/* 随机返回一个数组元素 */
|
|
int randomAccess(int* nums, int size) {
|
|
// 在区间 [0, size) 中随机抽取一个数字
|
|
int randomIndex = rand() % size;
|
|
// 获取并返回随机元素
|
|
int randomNum = nums[randomIndex];
|
|
return randomNum;
|
|
}
|
|
|
|
/* 扩展数组长度 */
|
|
int* extend(int* nums, int size, int enlarge) {
|
|
// 初始化一个扩展长度后的数组
|
|
int* res = (int *)malloc(sizeof(int) * (size + enlarge));
|
|
// 将原数组中的所有元素复制到新数组
|
|
for (int i = 0; i < size; i++) {
|
|
res[i] = nums[i];
|
|
}
|
|
// 初始化扩展后的空间
|
|
for (int i = size; i < size + enlarge; i++) {
|
|
res[i] = 0;
|
|
}
|
|
// 返回扩展后的新数组
|
|
return res;
|
|
}
|
|
|
|
/* 在数组的索引 index 处插入元素 num */
|
|
void insert(int* nums, int size, int num, int index) {
|
|
// 把索引 index 以及之后的所有元素向后移动一位
|
|
for (int i = size - 1; i > index; i--) {
|
|
nums[i] = nums[i - 1];
|
|
}
|
|
// 将 num 赋给 index 处元素
|
|
nums[index] = num;
|
|
}
|
|
|
|
/* 删除索引 index 处元素 */
|
|
void removeItem(int* nums, int size, int index) {
|
|
// 把索引 index 之后的所有元素向前移动一位
|
|
for (int i = index; i < size - 1; i++) {
|
|
nums[i] = nums[i + 1];
|
|
}
|
|
}
|
|
|
|
/* 遍历数组 */
|
|
void traverse(int* nums, int size) {
|
|
int count = 0;
|
|
// 通过索引遍历数组
|
|
for (int i = 0; i < size; i++) {
|
|
count++;
|
|
}
|
|
}
|
|
|
|
/* 在数组中查找指定元素 */
|
|
int find(int* nums, int size, int target) {
|
|
for (int i = 0; i < size; i++) {
|
|
if (nums[i] == target)
|
|
return i;
|
|
}
|
|
return -1;
|
|
}
|
|
|
|
|
|
/* Driver Code */
|
|
int main() {
|
|
/* 初始化数组 */
|
|
int size = 5;
|
|
int arr[5];
|
|
printf("数组 arr = ");
|
|
printArray(arr, size);
|
|
|
|
int nums[5] = { 1, 3, 2, 5, 4 };
|
|
printf("数组 nums = ");
|
|
printArray(nums, size);
|
|
|
|
/* 随机访问 */
|
|
int randomNum = randomAccess(nums, size);
|
|
printf("在 nums 中获取随机元素 %d", randomNum);
|
|
|
|
/* 长度扩展 */
|
|
int enlarge = 3;
|
|
int* res = extend(nums, size, enlarge);
|
|
size += enlarge;
|
|
printf("将数组长度扩展至 8 ,得到 nums = ");
|
|
printArray(res, size);
|
|
|
|
/* 插入元素 */
|
|
insert(res, size, 6, 3);
|
|
printf("在索引 3 处插入数字 6 ,得到 nums = ");
|
|
printArray(res, size);
|
|
|
|
/* 删除元素 */
|
|
removeItem(res, size, 2);
|
|
printf("删除索引 2 处的元素,得到 nums = ");
|
|
printArray(res, size);
|
|
|
|
/* 遍历数组 */
|
|
traverse(res, size);
|
|
|
|
/* 查找元素 */
|
|
int index = find(res, size, 3);
|
|
printf("在 res 中查找元素 3 ,得到索引 = %d\n", index);
|
|
|
|
return 0;
|
|
}
|