本文介绍: 接下来定义了顺序表的基本操作函数 `init`、`insert`、`remove`、`get` 和 `print`。在 `main` 函数中,首先初始化了一个顺序表对象 `list`,然后通过调用 `insert` 函数向顺序表中插入元素,通过调用 `remove` 函数从顺序表中删除元素,通过调用 `get` 函数获取指定位置的元素值,并通过调用 `print` 函数打印顺序表中的所有元素。// 位置为 2 的元素值:30。// 顺序表的元素:10 20 30。// 顺序表的元素:10 30。

【2017年山西大学考研真题】已知线性表按顺序存储,且每个元素都是不相同的整数型元素。

(1)设计把所有奇数移动到所有偶数前面的算法。

(2)根据给出算法的设计思想,根据设计思想,给出描述算法


(1)算法设计思想:
1. 使用两个指针 `start` 和 `end` 分别指向线性表的第一个元素和最后一个元素。
2. 不断移动 `start` 指针,直到找到一个偶数。
3. 不断移动 `end` 指针,直到找到一个奇数。
4. 如果 `start` 指针小于等于 `end` 指针,则将 `start` 指针指向的偶数和 `end` 指针指向的奇数进行交换。
5. 重复步骤 2 ~ 4,直到 `start` 指针大于等于 `end` 指针。

(2)根据上述设计思想,可以用 C 语言编写以下算法:

“`c
#include <stdio.h>

void swap(int* a, int* b) {
    int temp = *a;
    *a = *b;
    *b = temp;
}

void moveOddBeforeEven(int* arr, int n) {
    if (arr == NULL || n <= 1) {
        return;
    }

    int* start = arr;         // start 指针指向数组的第一个元素
    int* end = arr + n – 1;   // end 指针指向数组的最后一个元素

    while (start < end) {
        while (*start % 2 != 0) {  // 找到一个偶数
            start++;
        }

        while (*end % 2 == 0) {    // 找到一个奇数
            end–;
        }

        if (start < end) {
            swap(start, end);     // 交换偶数和奇数
        }
    }
}

int main() {
    int arr[] = {2, 1, 3, 8, 5, 6, 7, 4};
    int n = sizeof(arr) / sizeof(arr[0]);

    printf(“移动前的数组:”);
    for (int i = 0; i < n; i++) {
        printf(“%d “, arr[i]);
    }
    printf(“n”);

    moveOddBeforeEven(arr, n);

    printf(“移动后的数组:”);
    for (int i = 0; i < n; i++) {
        printf(“%d “, arr[i]);
    }
    printf(“n”);

    return 0;
}
“`

在上述代码中,首先定义了一个辅助函数 `swap`,用于交换两个整数的值。然后定义了主函数 `moveOddBeforeEven`,根据设计思想实现了将奇数移动到偶数前面的算法。最后,在 `main` 函数中,通过调用 `moveOddBeforeEven` 函数,将奇数移动到偶数前面,并打印移动前和移动后的数组。输出结果为:

“`
移动前的数组:2 1 3 8 5 6 7 4
移动后的数组:1 3 5 7 2 8 6 4
“`

可以看到,奇数已经移动到了偶数的前面。
 

原文地址:https://blog.csdn.net/m0_75063536/article/details/134818137

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。

如若转载,请注明出处:http://www.7code.cn/show_51279.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注