• C博客作业04--数组


    这个作业属于哪个班级 C语言--网络2011/2012
    这个作业的地址 C博客作业04--数组
    这个作业的目标 学习数组相关内容
    名字 李洋

    0.展示PTA总分(两张)


    1. 本章学习总结

    1.1 学习内容总结

    1.1.1 查找数据的方法

    • 直接查找
      使用循环语句从头到尾历遍数组,把所有的数据都查一遍.
    int key;
    
    int num[10]={0,1,2,3,4,5,6,7,8,9}
    
    scanf("%d",&key);
    for(int i=0;i<len;i++)
    {
          if(key==num[i])
          {
                printf("%d",i);
          }
    }
    if(i>=9)
    {
          printf("not found");
    }
    
    

    直接查找在要查的数组元素较少时还不错,但是面对数组元素较多时,如10000000000....,直接查找就显得很吃力了。

    • 二分查找
      • 二分法查找原理如下:
    1. 将有序数组分为三个部分,分别为中间值前(中间值数之前的一组数据),中间值 和中间值后(中间值之后的一组数据);
    1. 将要查找的数与中间值的数相比较,等于则退出查找,小于则在中间值前进行比 较,大于在在中间值后进行比较,依次递归,直至查找到对应的值为止;
    • 二分法流程如下:

    2. 插入数据的方法

    • 先用循环试着历遍数组,逐个比较大小,以找到插入数应该放的位置。在插入位置以后的数组元素依次右移一位完成。

    3. 删除数据的方法

    1. 删除数组中指定位置的元素

      • 设置循环,从要删除的元素所在位置开始,之后的元素依次向左移动一位,直接把要删除的元素覆盖。
    2. 删除数组中的重复元素

      1. 定义一个辅助数组hash[?],下标为目标数组的元素(如果目标数组是字符数组,需减去‘ ’转换成特定的整型数字),辅助数组初值为0;

      2. 输入一个数N,判断hash[N]是否为大于0,如果是则表明元素在目标数组中重复。若hash[N]等于0,说明仅有一个,无重复

      3. 设置循环,如果hash数组对应值为0,就输出;大于0的则不输出,即重复的元素被删除

    1.1.4 数据排序的方法

    • 选择排序

      • 选择排序的步骤:
      1. 在未排序的n个数(a[0]~a[n-1])中找到最小值,将它与a[1]交换;
      1. 在剩下的未排序的n-1个数(a[1]~a[n-1])中找到最小数,将它与a[1]交换;

      n-1. 在剩下的未排序的2个数(a[n-2]~a[n-1])中找到最小数,将它与a[n-2]交换;

      • 选择排序的流程(以三个数为例):
    • 冒泡排序

      • 冒泡序列的步骤:
      1. 在未排序的n个数中,a[0]与a[1]比较大小,如果a[0]比a[i]大,则交换两个数;
      1. a[1]与a[2]比较大小,如果a[1]比a[2]大,则交换两个数;
        ...

    1.1.5 数组做枚举用法

    枚举类型在使用中有以下规定:

    1.枚举值是常量,不是变量。不能在程序中用赋值语句再对它赋值 。
    例如对枚举weekday的元素再作以下赋值:
    sun=5;
    mon=2;
    sun=mon;
    都是错误的。

    1. 枚举元素本身由系统定义了一个表示序号的数值,从0开始顺序定义为0,1,2 …。
    1. 枚举的定义枚举类型定义的一般形式为:
      enum 枚举名{ 枚举值表 };
      在枚举值表中应罗列出所有可用值。这些值也称为枚举元素。

    1.1.6 哈希数组的用法

    • 定义一个辅助数组,用时间换空间
      1. 定义一个辅助数组hash[?],下标为目标数组的元素(如果目标数组是字符数组,需减去‘ ’转换成特定的整型数字),辅助数组初值为0;

      2. 输入一个数N,判断hash[N]是否为大于0,如果是则表明元素在目标数组中重复。

      3. 若hash[N]等于0,说明仅有一个,无重复。

    
    初始化hash数组为0
    for i=1 to n
        输入一个数 data
        if
            hash[data]==1:
                有重复数据
                return 0
    end for
    return 1
    

    1.1.7 字符、字符串数组

    • 一维字符数组

      • 一维字符数组用于窜访字符型数据。它的定义、初始化和引用与其他类型的一维数组一样。例如:
    char str[5];
    str[5]={'h','e','l','l','o'}
    
    • 对静态数组的部分元素赋值,其他位置元素为0
      例如:
    ststic char s[80]={'h','e','l','l','o'}
    
    
    • 字符串

      • 字符串可以存放在一维数组中。例如:
        char str[4]={'a','b','c',''}

      • 字符数组的初始化乘可以使用字符常量。例如:
        char str[4]="abc";

      • 字符串初始化

    while((str[i]=getchar())!='
    ')
    {
          i++;
    }
    str[i]='';
    
    

    或者fgets(str);

    字符串有结束符,结束符占一个字节

    2. PTA实验作业

    2.1 题目(1)

    2.1.1 伪代码

    2.1.2 代码截图

    2.1.3 代码对比同学

    • 同:都是先用循环试着历遍数组,逐个比较以找到插入数应该放的位置。

    • 异:找到位置后,把x插入数组的操作不同:

      • 我的方法是在插入位置以后的数组元素依次右移一位完成;
      • 同学的方法是找到位置后,把比x大的数与x进行交换,之后在新的的数组中,找新的x所在的位置。

    两种方法的实质都是通过交换实现插入数据,我是直接逐个交换,而同学的方法是把x当做一个辅助参数,实现交换。

    • 特点:相对于同学的方法,他的代码量少了一点,但我的相对来说运行效率上要更胜一筹。

    2.2 题目(2)

    2.2.1 伪代码

    2.2.2 代码截图

    2.2.3 代码对比超星

    • 同:同超新视频一样,我们都是先从行找最大值,再在列找最小值的过程;

    • 异:

      • 在找到行最大值的坐标后,我选择继续找列最小值的横坐标,比较两者的横坐标以确定两者是不是同一个数;

      • 超星视频所讲的是,找到行最大值后,在它所在的那一列,找是否有比它更小的值,如果有,则说明它不是列最小的,即它不是鞍点。

  • 相关阅读:
    228. Summary Ranges
    227. Basic Calculator II
    224. Basic Calculator
    222. Count Complete Tree Nodes
    223. Rectangle Area
    221. Maximal Square
    220. Contains Duplicate III
    219. Contains Duplicate II
    217. Contains Duplicate
    Java编程思想 4th 第4章 控制执行流程
  • 原文地址:https://www.cnblogs.com/ly1218/p/14130461.html
Copyright © 2020-2023  润新知