精华内容
下载资源
问答
  • 1,静态二维数组存储结构是一段连续内存,存储形式和以为数组一样。 类似用一维数组代替二维数组,如需要创建 aa[m][n]; 可以用一维数组代替为 bb[m*n] 使用时候元素 aa[i][j] 等于bb[i*n+j] 。定义二维数组...


    1,静态二维数组存储结构是一段连续的内存,存储形式和以为数组一样。

    类似用一维数组代替二维数组,如需要创建 aa[m][n]; 可以用一维数组代替为  bb[m*n]  

    使用时候元素 aa[i][j] 等于bb[i*n+j] 。定义二维数组不过是系统做了 i*n+j运算来查找  i 行 j 列的元素。


    有图可知,aa[1][0] 的地址与a[0]的地址相同。

    int bb[9][9];
    cout<<" &b[1]: "<<&bb[1]<<" &bb[1][0]: "<<&bb[1][0]<<endl;


    数组名bb的值就是元素bb[0][0]的地址,bb只能算是指向变量的指针,也就是一级指针,

    所以运算  int **p=bb; 会出错,

    只能用一级行指针代替这个运算,如   int (*p)[9] =bb;

    告诉行指针每行的长度,就能把一维数组当二维数组运算。


    2,new出来的二维数组结构很明显,二级指针

    int  **aa= int *[9];  //创建9个一级指针元素的数组,

    1.    for(int i =0; i<row; i++)  
    2.     {  
    3.         aa[i]=new int [column];  
    4.     }  
    然后再给每个行指针变量赋值。



    展开全文
  • 数据结构-二维数组-存储结构

    千次阅读 2017-09-28 11:18:40
    数组的两个主要的顺序存储方式,数组具有随机访问特点,要求能够依据下标计算出任数组元素的存储地址(概念上的地址):计算机主存的每个地址和存储内的每个...在计算元素地址之前需要了解二维数组的两种存储方式。

    数据结构-二维数组存储结构

    一、随机访问地址计算

    前情提要:

    下文中说到的地址,在c语言和c++语言里叫指针,与现实生活中每个家庭都有家庭地址一样类似的概念,但是真正细究起来,c语言和c++语言里的地址和真实的主存地址,也就是物理地址又是不一样的,主要原因是有一个计算机操作系统管理着你写的程序具体在哪一个物理内存块,所以c语言和c++语言里的地址也叫做虚拟地址,虚拟地址到物理地址映射是操作系统的内存管理实现的,这里说起来又是一堆的话。

    两种存储方式

    数组具有随机访问特点,要求能够依据下标计算出任一数组元素的存储地址(概念上的地址):
    计算机主存的每个地址和存储内的每个字节是一一对应的,而每个字节间的排列顺序是线式的。在计算元素地址之前需要了解二维数组的两种存储方式:
    二维数组具有两种存储方式:

    1、以行为主顺序优先存储:

    这里写图片描述
    因为aij是二维数组中第i行,第j列的元素,第(i1)行共(i1)n个元素,在第i行中前面已经存放了(j1)个元素,故在aij前面共放了(i1)n+(j1)个元素;
    令每个元素占用空间e个单位
    以第一个a11的地址address(a11)为基地址可以得到:

    address(aij)=address(a11)+((i1)n+(j1))e

    如果以任意的A[c1..d1,c2..d2](其中c1c2表示基地址元素;d1c1+1d2c2+1表示数组的行数和列数)可得:

    address(aij)=address(ac1c2)+((ic1)(d2c2+1)+(jc2))

    2、以列为主顺序优先存储:

    这里写图片描述

    因为aij是二维数组中第i行,第j列的元素,第(j1)列共(j1)m个元素,在第i行中前面已经存放了(i1)个元素,故在aij前面共放了(j1)m+(i1)个元素;
    令每个元素占用空间e个单位
    以第一个a11的地址address(a11)为基地址可以得到:

    address(aij)=address(a11)+((j1)m+(i1))e

    如果以任意的A[c1..d1,c2..d2](其中c1c2表示基地址元素;d1c1+1d2c2+1表示数组的行数和列数)可得:

    address(aij)=address(ac1c2)+((jc2)(d1c1+1)+(ic1))

    以上就是对数组的顺序存储两种方法介绍,初写理论文章大牛勿喷,多多指教哈

    展开全文
  • 二维数组:一维数组的叠加,将一维数组看做是一个 “数据”,则将多个数据 依照一位数组 在 另一方向上有序排列。 n维数组:(n-1)维数组的叠加,叠加方式参照 二维数组 由 一维数组 叠加。 注: (1)数据从 低...

    数组:存储相同数据类型的集合

    一维数组:是指由相同数据类型的数据 经过 在同一方向 有序排列,一维数组 结构单一,但却是二维数组、多维数组的集合

    二维数组:一维数组的叠加,将一维数组看做是一个 “数据”,则将多个数据 依照一位数组 在 另一方向上有序排列。

    n维数组:(n-1)维数组的叠加,叠加方式参照 二维数组 由 一维数组 叠加。

    注:

    (1)数据从 低地址 向 高地址 移动, 即 第一个 “数据” 在整个 数组中 地址最小。

    (2)数组名 可以 表示 第一个 “数据” 的地址

    代码如下:(结果为最后,并对其做解释)

    头文件:“指针.h”

    #pragma once
    #include<stdio.h>
    #define A 10

    //一维指针
    void point_1()
    {
        int i = 0;
        int amarry[A];
        for (i = 0; i < A; i++)
        {
            amarry[i] = i;
        }

        printf("\n\t 一维数组:\n");

    printf("\tamarry[0]:%d  地址: %p  sizeof(&amarry[0]):%d \n\n", amarry[0], amarry,sizeof(&amarry[0]));

        printf("\t*(amarry):%d  地址: %p sizeof(&(*amarry)):%d \n\n", *amarry, &amarry[0],sizeof(amarry));

    }

    void point_2()
    {
        int i = 0;
        int j = 0;
        int count = 0;
        int amarry_2[A][A];
        for (i = 0; i < A; i++)
        {
            for (j = 0; j < A; j++)
            {
                amarry_2[i][j] = count++;
            }
        }

        printf("\n\t 二维数组:\n");
        //打印数组的首地址
        printf("\n\tamarry_2[0][0]:%d  地址: %p  sizeof(&(amarry_2[0][0])): %d \n\n", amarry_2[0][0], &(amarry_2[0][0]),sizeof(&amarry_2[0][0]));
        printf("\t*(amarry_2[0]):%d  地址: %p  sizeof(amarry_2[0]+0): %d \n\n", *amarry_2[0], amarry_2[0], sizeof(amarry_2[0]));
        printf("\t*(*amarry_2+0):%d  地址: %p  sizeof(amarry_2): %d \n\n", **amarry_2, amarry_2, sizeof(amarry_2));
    }

    void test()
    {
        point_1();

    }

    源文件:test.c

    #include"指针.h"
    #include<Windows.h>

    int main()
    {
        test();
        system("pause");
        return 0;
    }

    一维数组:

    展开全文
  • 维数组怎样存储

    2020-04-27 16:34:15
    其实呢,二维数组的说法是不准确的,因为C/C++都不存在二维数组的数据结构,只不过一些入门教程为了让初学者快速理解产生的名词,所以在C/C++仅存在数组的数组的说法。所以说二维数组不过是方遍我们去理解的。 举个...

    大家对二维数组的存储方式有许许多多奇怪的错误看法,这里来梳理一下

    其实呢,二维数组的说法是不准确的,因为C/C++都不存在二维数组的数据结构,只不过一些入门教程为了让初学者快速理解产生的名词,所以在C/C++仅存在数组的数组的说法。所以说二维数组不过是方遍我们去理解的。

    举个例子吧:

    int nums[2][2] = {
    {1, 2},
    {2, 3}
    };
    

    这是一个很普通的二维数组,从某个维度上来理解(一切为了李姐)int x[2]与int nums[2][2等价,这里的x我们视为一种自定义数据类型 x 等于int a[2],好嘛,我们就可以认出所谓二维数组就是,一维数组类型的一维数组,二维数组也看可以看成一维数组,第一行数据为这个二维数组的首元素(二维数组的元素类型就是一维数组),行优先策略。

    从上述论证中可以得出,二维数组是属于一维数组的(嗯,不好解释,自行理解),所以二维数组是满足一维数组中的属性的,例如:数组名代表数组的首地址,也可以代表数组的首元素地址。这样讲不直观,给大家演示一下吧。

    在这里插入图片描述
    可见nums与&nums[0]一致。
    &num[1]与&nums[0]差值为8,可推出一行,一行进行存储的(如下图)

    一维数组的数组名是一级指针,可推出二维数组的数组名也是一级指针。
    在这里插入图片描述
    推理方面有很多问题,论证有很多问题,大家看一下,有什么问题,可以评论,我会回答的。

    展开全文
  • 一维数组是由数字组成的以单纯的排序结构排列的结构单一的数组。是二维数组和多维数组的基础。数组是一个由若干同类型变量组成的集合,引用这些变量时可用同一名字。数组均由连续的存储单元组成,最低地址对应于数组...
  • 一维数组是由数字组成的以单纯的排序结构排列的结构单一的数组。是二维数组和多维数组的基础。数组是一个由若干同类型变量组成的集合,引用这些变量时可用同一名字。数组均由连续的存储单元组成,最低地址对应于数组...
  • 数组 顺序存储结构 数据结构 C 希望大家一起学习!!
  • 维数组存储结构

    千次阅读 2013-07-04 12:20:09
    逻辑结构: 二维数组恰似一张表格(或矩阵)。数组元素中第一个下标 值表示该元素在表格中行号,第二个下标为列号。   M[3][3]具 ...二维数组在内存中按一维数组存放、占据一片连续存贮单元
  • windows栈结构:向低地址...内存中存储如下:再次定义个二维数组 S[1][2] = {10,11},由于向低地址出存储,其尾地址紧接着数组 M 中第个元素M[0][0],S[][]内存中存储如下:如果此时对 S 操作溢出其范围,如 ...
  • 2、数组是个引用数据类型,数组的变量只是个引用,数组元素和数组变量在内存里是分开存放的。 (二)初始化 1、静态初始化:初始化时由程序员显示指定每个数组元素的初始值,由系统决定数组长度。 2、动态...
  • 本文知识点(目录):一、一维数组1、前言如果需要存储大量数据,例如如果需要读取100个数,那么就需要定义100个变量,显然重复写100次代码,是没有太大意义。如何解决这个问题,Java语言提供了数组(array)数据...
  • 本文知识点(目录):一、一维数组1、前言如果需要存储大量数据,例如如果需要读取100个数,那么就需要定义100个变量,显然重复写100次代码,是没有太大意义。如何解决这个问题,Java语言提供了数组(array)数据...
  • 使用一维数组,模拟栈数据结构 要求: 1.这个栈可存储java中任何引用数据类型数据 2.压栈:push()方法 3.出栈:pop()方法 4.要求封装属性 5.编写测试程序,new栈对象,调用方法模拟压栈和出栈 测试代码: ...
  • 数组,顾名思义,是数据组合。它数组在应用上属于数据容器,不仅仅是一种基础数据类型,更是一种基础数据结构。...1. 一维数组(1)Numpy一维数组在python中,用列表也可以表示数组,但是用N...
  • 维数组在内存中的存储结构

    千次阅读 2019-07-16 22:20:13
    内存空间分为三块区域,从左至右分别为:栈内存,堆内存,存储区(存常量值) 基本数据类型变量空间开在栈内存中,引用数据...即一个一维数组存储的不是int或其他基本类型 值,而是同样引用类型——数组。a...
  • 二叉排序树,用顺序表(一维数组)作存储结构 1 以回车为输入结束标志,输入数列L,生成一棵二叉排序树T 2 对二叉树T作中序遍历,输出结果 3 计算二叉排序树T查找成功平均查找长度,输出结果 4 输入元素X,...
  • 约瑟夫环解法之一(一维动态数组存储结构)这是我第一次在CSDN上发布文章约瑟夫环问题算法流程实现代码执行结果 这是我第一次在CSDN上发布文章 您好! 这是我第一次在CSDN上发布文章,以前都是来这里查找资源,感谢...
  • 对于 Python 来说,序列是最基本数据结构。...对于 Java 来说,数组是在内存中存储相同数据类型连续空间,声明数组就是在内存空间中划出串连续空间。 数组名代表是连续空间首地址,通过首地
  • 数据结构 二维数组表示一维数组

    千次阅读 2013-08-03 11:31:51
    2、看数组代表矩阵的表示方法,引发了关于一维指针表示二维数组的方法和二维数组作为参数的问题 1)比如: a[3][4]是一个二维数组, 怎么定义一个指针p,使得它能替代数组名a? 比如对于访问一
  • 一维数组和二维数组

    2020-01-29 23:54:12
    数组一个变量,存储一组相同类型数据数据结构。...一维数组 使用数组 声明数组:告诉计算机数据类型是什么(声明数组时不规定数组长度) 数据类型 数组名[]; 数据类型[] 数组名; 分配空间:告诉计算机分配几个连...
  • 维数组的存储方式及其作为参数的方法二维数组A[m][n]可以视为由m个行向量组成的向量,或者是由n个列向量组成的向量。由于计算机的内存是一维的,多维数组的元素应排成线性序列后存入存储器。数组一般不做插入和...
  • 在学习数组之前,应该先简单了解一下什么数组,这里...一、定义一维数组Type[] name = new Type[number]; // Type应该是一致1. int[] arrayList;2. double[] arrayList = new double[2];3. String[] arrayList ...
  • 一维数组与二维数组

    2019-04-26 17:37:30
    开发工具与关键技术:开发工具:MyEclipsse 10 关键技术:一维数组与二维数组 1、 数组对于所有编程语言来说都是重要数据结构之一,Java 语言中提供数组是用来 存储固定大小同类型元素; 2、 必须声明数组变量...
  • (4)数组分为:一维数组、二维数组、三维数组、多维数组。 (5)数组中存储的元素类型是统一的。 (6)数组长度不可改变,数组一旦创建,长度是不可改变的,固定的。 数组优点:查找效率高。因为数组中的存储...
  • 有下面个图 图各个顶点之间只有唯一道路相连,而且任顶点都是可以互达, 解答要求 时间限制:1000ms, 内存限制:64MB 输入 每个样例输入: 第行两个正整数N,Q,图有N个顶点,有Q个询问。其中1 <= N,Q...
  • 数组的内存结构 数组操作常见问题 数组的常见操作 二维数组 数组练习题 数组的定义 数组的概念:同种类型数据的集合。其实数组就是个容器。 数组的好处:可以自动给数组中的元素从0开始编号,方便操作...
  • 一维数组总结

    2012-11-01 23:46:53
    2.一维数组的存储结构:数据存储在一个连续的内存空间 3.一维数组定义的四中方式: 1): 数据类型 [] 数组名 = new 数据类型[数组长度]; 2): 数据类型 [] 数组名 = {值,...}; 3): 数据...
  • 文章导读【前面介绍的数据类型都是基本数据类型,例如整型、字符型、浮点型等数据,属于简单的数据类型。但要解决现实问题仅有简单数据类型是不够的,难以反映出现实数据的特点...第二小节讲述数组的存储结构;第三...
  • 文章目录数组数组的存储结构一维数组的存储结构二维数组的存储结构一、二维数组按行优先存放二、二维数组按列优先存放特殊矩阵的压缩存储一、对称矩阵的压缩存储二、上、下三角矩阵的压缩存储上三角矩阵下三角矩阵三...
  • 讲到数组我发现用上面结构根本无法带入进去,原来是因为c语言中整个数组都是在栈当中,而多维数组虽然在逻辑结构上是多维,但是在存储结构上依旧是一维数组,这种存储结构如下图所示 其实这两者就是下图中...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,888
精华内容 1,555
关键字:

一维数组的存储结构