zoukankan      html  css  js  c++  java
  • 05数组

    数组

    特点:
    在一段连续的内存空间中存放相同的数据类型的数据,可随机访问。

    1. 定义

    // 1. 数据类型 数组名[ 数组长度 ]
    int array[5];
    array[0] = 10;
    array[1] = 20;
    array[2] = 30;
    array[3] = 40;
    array[4] = 50;
    for (int i = 0; i < 5; i++) {
        cout << array[i] << endl;
    }
    
    // 2. 数据类型 数组名[数组长度] = {值1,值2,值3...}
    // 若在初始化数据时,如果有数组元素没有被初始化,则会用0来填补剩余的数据
    int array2[5] = {10, 20, 30, 40, 50};
    for (int i = 0; i < 5; i++) {
        cout << array[i] << endl;
    }
    
    // 3. 数据类型 数组名[] = {值1,值2,值3...}
    int array3[] = {10, 20, 30, 40, 50};
    for (int i = 0; i < 5; i++) {
        cout << array3[i] << endl;
    }
    

    2. 一维数组名

    一维数组名的作用:

    1. 可以统计整个数组在内存中的长度;
    2. 可以获取数组在内存中的首地址;

    示例:

    #include <iostream>
    using namespace std;
    
    int main () {
        int arr[5] = {1, 2, 3, 4, 5};
        
        cout << "arr数组的元素为:"; 
        for (int i = 0; i < 5; i++) {
            cout << arr[i] << " ";
        }
        cout << "\n数组所占内存为:" << sizeof(arr) << endl;
        cout << "数组元素所占内存为:" << sizeof(arr[0]) << endl;
        cout << "数组长度为:" << sizeof(arr) / sizeof(arr[0]) << endl;
        cout << "数组的首地址为:" << arr << endl;
        
        cout << "数组第二个元素的地址为:" << &arr[1] << endl;
        cout << "数组第三个元素的地址为:" << &arr[2] << endl;
    
        return 0;
    }
    

    输出结果为:

    arr数组的元素为:1 2 3 4 5
    数组所占内存为:20
    数组元素所占内存为:4
    数组长度为:5
    数组的首地址为:0x7ffe32931920
    数组第二个元素的地址为:0x7ffe32931924
    数组第三个元素的地址为:0x7ffe32931928

    案例1:

    需求:在一个数组中记录了五只猪的体重,找出并打印最重的猪的体重。

    #include <iostream>
    using namespace std;
    
    int main () {
        int arr[5];
    
        // 输入
        cout << "请输入五只猪的体重:" << endl;
        for (int i = 0; i < 5; i++) {
            cin >> arr[i];
        }
    
        // 找最重的猪
        int max = arr[0];
        for (int i = 1; i < 5; i++) {
            if (max < arr[i]) {
                max = arr[i];
            }
        }
        cout << "最重的猪有:" << max << "斤。\n" << endl;
       
        return 0;
    }
    

    案例2:

    需求:输入5个元素,并将元素逆置。

    #include <iostream>
    using namespace std;
    
    int main () {
        int arr[5];
    
        cout << "请输入5个整数:" << endl;
        for (int i = 0; i < 5; i++) {
            cin >> arr[i];
        }
        
        for (int i =0; i < 5/2; i++) {
            int tmp = arr[i];
            arr[i] = arr[4-i];
            arr[4-i] = tmp;
        }
        
        for(int i = 0; i < 5; i++) {
            cout << arr[i] << " ";
        }
        cout << endl;
    
        return 0;
    }
    

    3. 冒泡排序

    作用:最常用的排序算法,对数组元素进行排序

    #include <iostream>
    using namespace std;
    
    void output(int* arr, int size) {
        for (int i = 0; i < size; i++) {
            cout << arr[i] << " ";
        }
        cout << endl;
    }
    
    int main() {
        int size = 8;
        int arr[8] = {4, 2, 8, 0, 5, 7, 1, 3, };
        cout << "排序开始前: ";
        output(arr, size);
    
        // 每次使一个元素就位,共需n-1轮比较
        for (int i = 0; i < size-1; i++) {
            for (int j = 0; j < size-i-1; j++) {
                if (arr[j] > arr[j+1]) {
                    int tmp = arr[j];
                    arr[j] = arr[j+1];
                    arr[j+1] = tmp;
                }
            }
            cout << "第" << i+1 << "轮排序后:";
            output(arr, size);
        }
    
        return 0;
    }
    

    运行结果:

    排序开始前: 4 2 8 0 5 7 1 3
    第1轮排序后:2 4 0 5 7 1 3 8
    第2轮排序后:2 0 4 5 1 3 7 8
    第3轮排序后:0 2 4 1 3 5 7 8
    第4轮排序后:0 2 1 3 4 5 7 8
    第5轮排序后:0 1 2 3 4 5 7 8
    第6轮排序后:0 1 2 3 4 5 7 8
    第7轮排序后:0 1 2 3 4 5 7 8

    4. 二维数组

    4.1 二维数组的定义:

    // 1. 数据类型 数组名[行数][列数]
    int arr1[2][3];
    arr1[0][0] = 1;
    arr1[0][1] = 2;
    arr1[0][2] = 3;
    arr1[1][0] = 4;
    arr1[1][1] = 5;
    arr1[1][2] = 6;
    
    // 2. 数据类型 数组名[行数][列数] = { {数据1,数据2}, {数据3, 数据4}}
    int arr2[2][3] = 
    {   
        {1, 2, 3},
        {4, 5, 6}
    };
    
    // 3. 数据类型 数组名[行数][列数] = {数据1, 数据2, 数据3, 数4}
    int arr3[2][3] = {1, 2, 3, 4, 5, 6};
    // 可见二维数组在实质上还是一维数组,元素地址的计算方式变了。
    
    // 4. 数据类型 数组名[ ][列数] = {数据1, 数据2, 数据3, 数4}
    int arr4[][3] = {1, 2, 3, 4, 5, 6};
    

    二维数组的遍历:

    for (int i = 0; i < row; i++) {
        for (int j = 0; j < col; j++) {
            cout << arr[i][j] << " ";
        }
        cout << endl;
    }
    

    4.2 二维数组名

    作用:

    • 获取二维数组所占的内存空间大小;
    • 获取二维数组首地址;

    示例:

    #include <iostream>
    using namespace std;
    
    void output(int arr[][3], int row, int col) {
        cout << "该二维数组的内容为:" << endl;
        for (int i = 0; i < row; i++) {
            for (int j = 0; j < col; j++) {
                cout << arr[i][j] << " ";
            }
            cout << endl;
        }
    }
    
    int main () {
        int row = 2;
        int col = 3;
        int arr[2][3] =
        {
            {1, 2, 3},
            {4, 5, 6},
        };
        output(arr, row, col);
        
        // 1. 查看二维数组占用的内存空间
        cout << "二维数组占用的内存空间为:" << sizeof(arr) << endl;
        cout << "二维数组第一行占用内存为:" << sizeof(arr[0]) << endl;
        cout << "二维数组第一个元素占用空间为:" << sizeof(arr[0][0]) << endl;
        cout << "该二维数组的行数为:" << sizeof(arr) / sizeof(arr[0]) << endl;
        cout << "该二维数组的列数为:" << sizeof(arr[0]) / sizeof(arr[0][0]) << endl;
    
    
        // 2. 查看二维数组的首地址
        cout << endl << "二维数组的首地址为:" << arr << endl;
        cout << "二维数组第一行首地址为:" << arr[0] << endl;
        cout << "二维数组第二行首地址为:" << arr[1] << endl;
    
        cout << "二维数组第一个元素首地址为:" << &arr[0][0] << endl;
        cout << "二维数组第二个元素首地址为:" << &arr[0][1] << endl;
    
        return 0;
    }
    

    运行结果为:

    该二维数组的内容为:
    1 2 3
    4 5 6
    二维数组占用的内存空间为:24
    二维数组第一行占用内存为:12
    二维数组第一个元素占用空间为:4
    该二维数组的行数为:2
    该二维数组的列数为:3
    二维数组的首地址为:0x7fffa2c94480
    二维数组第一行首地址为:0x7fffa2c94480
    二维数组第二行首地址为:0x7fffa2c9448c
    二维数组第一个元素首地址为:0x7fffa2c94480
    二维数组第二个元素首地址为:0x7fffa2c94484

    CS专业在读,热爱编程。
    专业之外,喜欢阅读,尤爱哲学、金庸、马尔克斯。
  • 相关阅读:
    Sublime Text 3 安装插件管理 Package Control
    Sublime Text 2&3中输入法不跟随光标移动的问题的解决方法
    Centos 7 yum 安装php
    Centos 7 yum 安装Apache
    正则验证多个邮箱用分号隔开
    Linux下修改网卡IP、DNS和网关
    mysqldump when doing LOCK TABLES问题
    jQuery遍历json
    Yii中CDbCriteria常用方法
    Parse error: syntax error, unexpected T_PUBLIC in 问题解决
  • 原文地址:https://www.cnblogs.com/jmhwsrr/p/15747177.html
Copyright © 2011-2022 走看看