顺序表存储四个整形。以32位操作系统为例,按字节寻址,需要16个字节。
4Byte = 32位
0x23 | 200 |
---|---|
0x27 | 390 |
0x31 | 78 |
0x35 | 12112 |
基本的顺序存储表:
Li[0] --> 0x23 --> 200
Li[3] --> 0x23 + 3*4Byte --> 12112
为什么list要从0开始? 序号相当于偏移量,便于查找。List[0]表示存储首地址偏移0;
为什么能通过偏移量的大小去寻找数据?因为所有数据的类型都相同。
然而下面的list,采用上面的方式存储就行不通了。
li = [1234, "ab"]
元素外置的顺序表:
- 把数据放到随机分配的地址存起来。
- 再申请16Byte的连续存储空间存放之前随机分配的地址。
li[0] = 0x324 -->0x100 --> 12。
内存:
内存是一个一个连续的存储单元标识的,8位一个字节。
对于内存中连续的二进制数据,存的时候要制定数据类型,否则数据的存储和读取会出问题。
比如:存放一个int类型的a,下面连续的32位会被解释成一个整数;
如果是4个char型数据,连续的32位会按照8位为一个字符型数据。
一个顺序表的完整信息包括2部分,一部分是表中的元素集合,另一部分是为实现正常操作而需记录的信息(表头信息),即有关的整体情况的信息,这部分信息主要包括元素存储区的容量和当前表中已有的元素个数两项。
顺序表的一体式结构和分离式结构:
优劣比较:一体式存储来了新数据只能重新开辟空间,而分离式存储只需要修改存储的表头地址。
存储区的2中扩充策略: