黑马Java版数据结构学习笔记(一)

本文介绍了数据结构的重要性,它涉及到数据在计算机中的组织方式和操作效率。数组作为一种线性表数据结构,利用连续内存空间存储相同类型的数据,允许随机访问。文章详细阐述了数组的定义、声明、赋值以及数组的物理结构和逻辑结构,解释了数组下标从0开始的原因。此外,还探讨了数组元素的寻址公式。
摘要由CSDN通过智能技术生成

一、为什么要学习数据结构?

        1.数据结构包括数据对象集以及它们在计算机中的组织方式,即它们的逻辑和物理存储结构,一般我们可以认为数据结构指的是一组数据的存储结构。

        2.算法就是操作数据的方法,即如何操作数据的效率更高,更节省资源。

        3.所谓线性表,就是将数据排成一条长线一样的结构,数组,链,栈,队列都是线性表结构,线性表上的每个数据最多只能前后两个方向。

二、数组

        2.1 定义

                数组是一种线性表的数据结构,它用一组连续的内存空间,来存储一组具有相同类型的数据,数组的特性:随机访问

(图一) 

例如图一所示:01,02,03,就是一段连续的内存空间,整个01,02,03,09,10就是一段不连续的内存空间

        2.2 数据的声明以及赋值等相关语句

          2.2.1数组的赋值:int [] array = new int[3]  //定义一个长度为3的数组

          2.2.2给数组指定位置赋值: array[0] = 1; //给数组中第0个元素赋值为1

          2.2.3获取数组中的第i个元素:int element = array[0];  //将数组中第0个元素给elemrnt

          2.2.4获取数组的长度: int size = array.length;   //定义变量size,用于接收数组的长度

  

        2.3 数组的物理结构和逻辑机构

                数组的逻辑结构是指我们可以用什么的表示方式来描述数组元素。比如有一个数组a,数组中有n个元素,我们可以使用(a1,a2,a3……,an)来描述数组中的每个元素,当然,从概念可以看出,数组的物理空间就是一块连续的内存单己。

从图中可以看出,访问数组中的元素是通过下标来访问的 

        2.3.1    计算机给每个内存单元都要分配一个地址,通过地址访问其数据,因此要访问数组中的某个元素时,首先要经过一个寻址公式计算要访问的元素在内存中的地址:

寻址公式:a[1] = baseAddress + i * dataTypeSize

        其中dataTypeSize代表数组中元素类型的大小,baseAddress代表内存的起始地址

        2.3.2数组下标为什么从0开始

                从数组存储的内存模型上来看,“下标”最确切的定义应该是“偏移”,如果用array来表示数组的首地址,array[0]就是偏移为0的位置。也就是首地址,array[k]就表示偏移k个type_sized 的位置,所以计算array[k[的内存地址只需要用这个公式:

array[k]_address = base_address + k * type_size

但如果下标从1开始,那么计算array[k]的内存地址会变成:

 array[k]_address = base_address + (k-1) * type_size

        对比两个公式,不难发现从数组下标1开始如果根据下标去访问数组元素,对于CPU来说,就多了一次减法指令

        当然另一方面也是由于历史原因,C语言的设计者使用0开始作为数组的下标,后来的高级语言沿用了这个一设计。

学习资源视频连接:https://www.bilibili.com/video/BV1dX4y1K7NN?p=4&spm_id_from=pageDriver

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值