第四章 串、数组和广义表——课后习题解练【数据结构(c语言版 第2版)】
1.选择题
(1)(2)(3)(4)(5)
答案:BBCAB
(6)(7)(8)(9)(10)
答案:BBBBB
(11)(12)(13)(14)(15)
答案:ABD CB C
2.应用题
(3)
(4)
3.算法设计题
(2)
// 函数功能:递归实现字符串逆序存储 // 参数说明:A - 字符数组,用于存储逆序后的字符串 void InvertStore(char A[]) {char ch; // 临时变量,用于存储输入的字符static int i = 0; // 静态变量,记录当前存储位置(跨递归调用保持状态)// 读取一个字符scanf("%c", &ch);// 递归终止条件:遇到 '.' 结束输入if (ch != '.') {// 递归调用,继续读取下一个字符InvertStore(A);// 递归返回时,将字符逆序存入数组// 由于递归的栈特性,最后输入的字符会先被存储A[i++] = ch;}// 在所有递归调用结束后,为字符串添加结束标记A[i] = '\0'; }
(6)
// 函数功能:将数组中所有正数排在所有负数的前面 // 参数说明: // A - 整数数组 // n - 数组长度 void Arrange(int A[], int n) {int i = 0; // 左指针,从数组开头开始int j = n - 1; // 右指针,从数组末尾开始int x; // 临时变量,用于交换元素// 使用双指针法进行排序while (i < j) {// 从左向右找到第一个负数(正数跳过)while (i < j && A[i] > 0) {i++;}// 从右向左找到第一个正数(负数跳过)while (i < j && A[j] < 0) {j--;}// 如果左指针仍在右指针左侧,交换元素if (i < j) {x = A[i]; // 临时保存左指针元素A[i] = A[j]; // 将右指针元素移到左边A[j] = x; // 将左指针元素移到右边i++; // 左指针右移j--; // 右指针左移}} }