差别
这里会显示出您选择的修订版和当前版本之间的差别。
| 两侧同时换到之前的修订记录 前一修订版 后一修订版 | 前一修订版 | ||
| aa [2024/11/25 18:31] – [工作页] doge24190 | aa [2025/04/15 01:32] (当前版本) – doge24190 | ||
|---|---|---|---|
| 行 7: | 行 7: | ||
| 点击下载 | 点击下载 | ||
| - | 以下是所有程序重新用指针实现的版本: | + | {{tag>存档}} |
| - | + | ||
| - | 1. 交换数组 a 和数组 b 的对应元素 | + | |
| - | + | ||
| - | #include < | + | |
| - | + | ||
| - | void swap(int *a, int *b, int n) { | + | |
| - | for (int i = 0; i < n; i++) { | + | |
| - | int temp = *(a + i); | + | |
| - | *(a + i) = *(b + i); | + | |
| - | *(b + i) = temp; | + | |
| - | } | + | |
| - | } | + | |
| - | + | ||
| - | int main() { | + | |
| - | int a[] = {1, 2, 3}; | + | |
| - | int b[] = {4, 5, 6}; | + | |
| - | int n = sizeof(a) / sizeof(a[0]); | + | |
| - | + | ||
| - | swap(a, b, n); | + | |
| - | + | ||
| - | printf(" | + | |
| - | for (int i = 0; i < n; i++) printf(" | + | |
| - | printf(" | + | |
| - | for (int i = 0; i < n; i++) printf(" | + | |
| - | + | ||
| - | return 0; | + | |
| - | } | + | |
| - | + | ||
| - | 2. 求整型数组中的最大值 | + | |
| - | + | ||
| - | #include <stdio.h> | + | |
| - | + | ||
| - | int findMax(int *arr, int n) { | + | |
| - | int max = *arr; // 首元素 | + | |
| - | for (int i = 1; i < n; i++) { | + | |
| - | if (*(arr + i) > max) max = *(arr + i); | + | |
| - | } | + | |
| - | return max; | + | |
| - | } | + | |
| - | + | ||
| - | int main() { | + | |
| - | int arr[] = {3, 5, 7, 2, 8}; | + | |
| - | int n = sizeof(arr) / sizeof(arr[0]); | + | |
| - | + | ||
| - | printf(" | + | |
| - | + | ||
| - | return 0; | + | |
| - | } | + | |
| - | + | ||
| - | 3. 删除字符串中所有字符 ‘k’ | + | |
| - | + | ||
| - | #include < | + | |
| - | + | ||
| - | void removeChar(char *str, char ch) { | + | |
| - | char *p1 = str, *p2 = str; | + | |
| - | while (*p1 != ' | + | |
| - | if (*p1 != ch) { | + | |
| - | *p2 = *p1; | + | |
| - | p2++; | + | |
| - | } | + | |
| - | p1++; | + | |
| - | } | + | |
| - | *p2 = ' | + | |
| - | } | + | |
| - | + | ||
| - | int main() { | + | |
| - | char str[] = " | + | |
| - | + | ||
| - | removeChar(str, | + | |
| - | + | ||
| - | printf(" | + | |
| - | + | ||
| - | return 0; | + | |
| - | } | + | |
| - | + | ||
| - | 4. 用指针方法完成选择排序 | + | |
| - | + | ||
| - | #include < | + | |
| - | + | ||
| - | void selectionSort(int *arr, int n) { | + | |
| - | for (int i = 0; i < n - 1; i++) { | + | |
| - | int *min = arr + i; | + | |
| - | for (int *j = arr + i + 1; j < arr + n; j++) { | + | |
| - | if (*j < *min) { | + | |
| - | min = j; | + | |
| - | } | + | |
| - | } | + | |
| - | int temp = *(arr + i); | + | |
| - | *(arr + i) = *min; | + | |
| - | *min = temp; | + | |
| - | } | + | |
| - | } | + | |
| - | + | ||
| - | int main() { | + | |
| - | int arr[] = {64, 25, 12, 22, 11}; | + | |
| - | int n = sizeof(arr) / sizeof(arr[0]); | + | |
| - | + | ||
| - | selectionSort(arr, | + | |
| - | + | ||
| - | printf(" | + | |
| - | for (int i = 0; i < n; i++) printf(" | + | |
| - | + | ||
| - | return 0; | + | |
| - | } | + | |
| - | + | ||
| - | 5. 实现整型数组元素循环右移 m 位 | + | |
| - | + | ||
| - | #include < | + | |
| - | + | ||
| - | void rotateRight(int *arr, int n, int m) { | + | |
| - | m = m % n; | + | |
| - | for (int i = 0; i < m; i++) { | + | |
| - | int last = *(arr + n - 1); | + | |
| - | for (int *j = arr + n - 1; j > arr; j--) { | + | |
| - | *j = *(j - 1); | + | |
| - | } | + | |
| - | *arr = last; | + | |
| - | } | + | |
| - | } | + | |
| - | + | ||
| - | int main() { | + | |
| - | int arr[] = {1, 2, 3, 4, 5}; | + | |
| - | int n = sizeof(arr) / sizeof(arr[0]); | + | |
| - | int m = 2; | + | |
| - | + | ||
| - | rotateRight(arr, | + | |
| - | + | ||
| - | printf(" | + | |
| - | for (int i = 0; i < n; i++) printf(" | + | |
| - | + | ||
| - | return 0; | + | |
| - | } | + | |
| - | + | ||
| - | 程序说明 | + | |
| - | + | ||
| - | • 每个程序都通过指针操作数据结构。 | + | |
| - | • 数组元素通过 *(arr + index) 访问,指针间接操作代替了下标。 | + | |
| - | • 字符串删除操作采用双指针法。 | + | |
| - | • 排序和循环右移直接用指针运算完成。 | + | |
| - | + | ||
| - | 以上代码均可复制运行。 | + | |