05.数据结构基础—线性表顺序存储
一.线性表存储结构及实现—顺序存储
1.1定义:
前面说过顺序存储,称为顺序表,也叫向量。很好理解,也就是元素在连续空间中也是相邻的
1.2描述顺序表的属性
起始位置:空间的开始位置
容量:线性表的最大长度
当前长度:当前存有数据的长度
这里将起始位置设为LOC(a1),元素类型为int,也就是占4个字节。
我们求ai的位置:LOC(ai)=LOC(a1)+(i-1)*4
由此我么可以得到求任意元素位置的通式:LOC(ai)=LOC(a1)+(i-1)*c
其中c为数据元素大小
在c/c++语言中,可以用sizeof(ElemType)查询数据元素大小
1.3静态分配
所谓静态分配即使用一个数组来实现顺序表
#include <iostream>
using namespace std;
#define MaxSize 100 //定义最大长度
typedef struct{
int data[MaxSize]; //用静态数组存放数据,前面的数据类型自行修改
int length; //顺序表当前长度
} SeqList;
//初始化顺序表
void InitList(SeqList &L){
for(int i =0;i<=MaxSize;i++)
L.data[i]=0; //所有数据元素设为默认值
L.length = 0; //顺序表初始长度为0
}
int main()
{
SeqList L; //声明一个顺序表
InitList(L); //初始化顺序表
return 0;
}
在这里如果我们不设置元素为默认值,数据元素就会为“乱值”,原因是内存中遗留的‘脏数据’
思考一下问题:
如果“数组”存满了怎么办?如果一开始申请很大的空间,会出现设么问题?
答案就是没有办法,数组的储存空间是静态的。第二个问题,会造成很大的空间浪费。这也是静态分配的缺点。
1.4动态分配
#include <iostream>
using namespace