当前位置: 首页 > article >正文

考研真题数据结构

【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
```

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


http://www.kler.cn/news/163076.html

相关文章:

  • python3安装redis
  • Navicat 技术指引 | 适用于 GaussDB 分布式的模型功能
  • Django的logging-日志模块的简单使用方法
  • 微信小程序网络请求二次封装
  • Java项目开发,业务比较复杂如何减少bug
  • 基于深度学习yolov5实现安全帽人体识别工地安全识别系统-反光衣识别系统
  • ArkTS快速入门
  • CentOS常用基础命令大全(linux命令)2
  • Pycharm Jupyter ModuleNotFoundError 问题解决
  • 【前端】CSS基础(学习笔记)
  • Python合并一个 Excel 里面的多张表
  • 虚幻学习笔记10—C++函数与蓝图的通信
  • django与数据库交互关于当前时间的坑
  • 2023.12.7 关于 MySQL 事务详解
  • C#云LIS系统源码 B/S架构,SaaS模式,可扩展性强
  • 数据结构——二叉树的链式结构
  • pcl-3 pcl结合opencv做svm分类(法向量特征数据)
  • 如何运用gpt改写出高质量的文章 (1)
  • 【计算机网络】应用层电子邮件协议
  • AWS Remote Control ( Wi-Fi ) on i.MX RT1060 EVK - 3 “编译 NXP i.MX RT1060”( 完 )
  • 奇点云2023数智科技大会来了,“双12”直播见!
  • 【游戏引擎 - C#脚本系统】6、C#端调用C++函数
  • 使用 Axios 进行网络请求的全面指南
  • echart中定义brush,默认状态,触发状态
  • MQTT协议对比TCP网络性能测试模拟弱网测试
  • Mybatis XML改查操作(结合上文)
  • SpringBoot集成WebSocket
  • Redis 基础—Redis Desktop Manager(Redis可视化工具)安装及使用教程
  • 如何使用玻璃材质制作3D钻石模型
  • 【conda】利用Conda创建虚拟环境,Pytorch各版本安装教程(Ubuntu)