文案桥梁网—你的文案搜索专家

文案桥梁网—你的文案搜索专家

c语言编程:逆序排列?

59

在C语言中,数组和字符串的逆序排列是常见的算法练习。以下是实现方法及示例代码:

一、数组逆序排列

1. 原地逆序(交换元素)

通过双指针法,使用两个指针分别指向数组的首尾,交换对应元素后向中间移动指针,直到相遇或交错。

示例代码:

```c

include

// 函数声明

void reverseArray(int arr[], int n);

void reverse(char *str);

int main() {

// 整数数组逆序

int arr[] = {1, 2, 3, 4, 5};

int n = sizeof(arr)/sizeof(arr);

printf("原数组: ");

for(int i = 0; i < n; i++) printf("%d ", arr[i]);

reverseArray(arr, n);

printf("\n逆序后: ");

for(int i = 0; i < n; i++) printf("%d ", arr[i]);

printf("\n");

// 字符串逆序

char str[] = "Hello, World!";

printf("原字符串: %s\n", str);

reverse(str);

printf("逆序后: %s\n", str);

return 0;

}

// 交换数组元素的函数

void reverseArray(int arr[], int n) {

int start = 0, end = n - 1;

while(start < end) {

int temp = arr[start];

arr[start] = arr[end];

arr[end] = temp;

start++;

end--;

}

}

// 交换字符串字符的函数

void reverse(char *str) {

int start = 0, end = strlen(str) - 1;

while(start < end) {

char temp = str[start];

str[start] = str[end];

str[end] = temp;

start++;

end--;

}

}

```

2. 动态输入数组

通过循环读取用户输入的整数,存储到动态分配的数组中,输入0结束输入,然后调用逆序函数。

示例代码:

```c

include

include

int main() {

int *arr = NULL;

int n = 0, i;

printf("输入整数(输入0结束):");

while(1) {

int num;

scanf("%d", &num);

if(num == 0) break;

arr = realloc(arr, (n + 1) * sizeof(int));

if(arr == NULL) {

printf("内存分配失败!\n");

break;

}

arr[n++] = num;

}

printf("输入的数组:");

for(i = 0; i < n; i++) printf("%d ", arr[i]);

printf("\n逆序后:");

reverseArray(arr, n);

printf("\n");

free(arr);

return 0;

}

```

二、字符串逆序(字符数组)

1. 原地逆序

通过双指针法交换字符串首尾字符,逐步向中间移动指针。

示例代码:

```c

include

include

void reverse(char *str) {

int start = 0, end = strlen(str) - 1;

while(start < end) {

char temp = str[start];

str[start] = str[end];

str[end] = temp;

start++;

end--;

}

}

int main() {

char str[] = "Hello, World!";

printf("原字符串: %s\n", str);

reverse(str);

printf("逆序后: %s\n", str);

return 0;

}

```

2. 使用标准库函数

C语言标准库提供了`strrev`函数,可直接逆序字符串。

示例代码:

```c

include

include

int main() {

char str[] = "Hello, World!";

printf("原字符串: %s\n", str);

strrev(str);

printf("逆序后: %s\n", str);

return 0;

}

```

三、其他方法

1. 递归逆序

通过递归调用实现数组或字符串逆序,但效率较低,不推荐用于大规模数据。

2. 使用库函数

部分编译器提供`qsort`函数,可结合自定义比较函数实现排序,但需注意`qsort`本身是排序而非逆序[