IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 数组知识大总结 -> 正文阅读

[数据结构与算法]数组知识大总结

一维数组的创建和初始化

数组的创建

数组是一组相同类型元素的集合

tyoe_ty arr_name [const_n]

数组元素类型 常量表达式,指定数组大小

注意:

C99中引入了变长数组(长度可变)的概念,允许数组大小用变量来制定,如果编译器不支持C99的变长数组那就不能使用

VS2019不支持变长数组

数组的初始化

创建的同时并赋值

int main()
{
    int arr1[10] = {1,2,3,4};//不完全初始化//10
    int arr2[] = {1,2,3,4};//4
    //char ch1[] = {'a','b'};
    //char ch2[] = {'a',98};
    return 0;
}

注意:变长数组是不能初始化的

在静态区创建的变量默认初始化值为0(全局变量,静态变量)

在栈区创建的变量若不初始化是随机值(局部变量,形式参数)

一维数组的使用

[ ]下标引用操作符,下标从0开始

arr[4] arr,4是[ ]的两个操作数

int main()
{   
    //计算数组元素个数的写法
    int sz =sizeof(arr)/sizeof(arr[0]);
    int arr[100] = {1,2,3,4,5,6};//创建数组时不能使用变量
    //写代码赋值1~100
    int i = 0
    //赋值
    for (i= 0; i < ; i++)
    {
        a[i] = i + 1;
    }
    //打印
    for (i = 0; i < sz; i++)
    {
        printf("%d",arr[i]);//可以使用变量
    }
}

一维数组在内存中的存储

int main()
{
    int arr[10] = {1,2,3,4,5,6,7,8,9,10};
    //打印数组的每个元素地址
    int i = 0;
    int sz = sizeof(arr)/sizeof(arr[0]);
    for (i=0;i<sz;i++)
    {
        printf("&arr[%d]=%p\n",i,&arr[i]);
    }
    return 0;
}

一维数组在内存中是连续存放的(差4字节)→可以用下标和指针访问

随着数组下标的增长,地址是由低到高变化的

数组名是数组首元素的地址

两个例外:

  1. sizeof(数组名),数组名表示整个数组,计算整个数组的大小
  2. &数组名,数组名表示整个数组,取出的是整个数组的地址

%p--打印地址

char* p:跳过一个字符

二维数组的创建和初始化

二维数组的创建

int main()
{
	int arr[3][5];
	     //三行五列

	return 0;
}

二维数组的初始化

可以省略行,但不能省略列

 //int arr[3][5] = { 1,2,3,4,5,6 };//不完全初始化
    // int arr[][5] = { 1,2,3,4,5,6 };
	     
	int arr[][5] = {{1,2},{3,4},{5,6}};

二维数组的访问

int main()
{
           
	//int arr[3][5] = { 1,2,3,4,5,6 };//不完全初始化
    // int arr[][5] = { 1,2,3,4,5,6 };
	     
	int arr[][5] = {{1,2},{3,4},{5,6}};
 int i = 0;
 for (i=0;i<3;i+=)
 //i<sizeof(arr)/sizeof(arr[0])
 {
     int j=0;
     for (j=0;j<5;j++)
     //j<sizeof(arr[0])/sizeof(arr[0][0])
     {
         printf("%d ",arr[i][j]);//下标访问操作符
     }
     printf("\n");
 }
	return 0;
}

二维数组的内存存储

int main()
{     	     
	int arr[3][5] = {{1,2},{3,4},{5,6}};
    int i = 0;
    for (i=0;i<3;i+=)
 {
     int j=0;
     for (j=0;j<5;j++)
     {
         printf("&arr[i][j] = %p\n ",i,j,&arr[i][j]);
     }
 }
	return 0;
}

二维数组在内存中也是连续存放的

数组越界

下标必须在0~n-1当中不要超越数组访问

程序员需要自行检查(编译器一般不报错)

二维一维都存在越界问题

数组作为函数参数

冒泡排序函数

数组中两个相邻元素进行比较,如果不满足顺序就交换

n个元素进行n-1趟冒泡排序

void bubble_sort(int arr[],int sz)//指针
// void bubble_sort(int* arr,int sz)

{
    //趟数
    
    int i = 0;
    for (i = 0; i < sz-1; i++)
    {
        int flag = 0;
        //每一趟冒泡过程
        int j = 0;
        for (j = 0; j <sz-1-i ; j++)
        {
            if (arr[j] > arr[j + 1])
            {
                flag=0;
                //交换
                int tmp = arr[j];
                arr[j] = arr[j +1];
                arr[j + 1] = tmp;
            }
        }
    }
}


int main()
{
    int arr[] = { 9,8,7,6,5,4,3,2,1,0 };
    //冒泡排序函数
    //arr表示首元素地址
    int sz = sizeof(arr) / sizeof(arr[0]);

    bubble_sort(arr,sz);
    int i = 0;
    for (i = 0; i < 10; i++)
    {
        printf("%d ", arr[i]);
    }
    return 0;
}

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-01-24 11:09:15  更:2022-01-24 11:09:17 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 18:49:20-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码