25计算机考研,数据结构知识点整理(内容借鉴了王道408+数据结构教材),还会不断完善所整理的内容,后续的内容也会不断更新(可以关注),若有错误和不足欢迎各位朋友指出!
目录
一.顺序表的初始化
静态分配和动态分配的顺序表的初始化操作是不同的。
1.静态分配
静态分配在声明一个顺序表时,就已为其分配了数组空间,因此初始化时只需将顺序表的当前长度设为0。
//SqList L; //声明一个顺序表
void InitList(sqList *L){
L.length=0; //顺序表初始长度为0
2.动态分配
动态分配的初始化为顺序表分配一个预定义大小的数组空间,并将顺序表的当前长度设为0。MaxSize 指示顺序表当前分配的存储空间大小,一旦因插入元素而空间不足,就进行再分配。
void InitList(SeqList *L){
L.data=(ElemType *)malloc(InitSize*sizeof(ElemType)); //分配存储空间
L.length=0; //顺序表初始长度为0
L.MaxSize=InitSize; //初始存储容量
注意:动态分配并不是链式存储,它同样属于顺序存储结构,物理结构没有变化,依然是随机存取方式,只是分配的空间大小可以在运行时动态决定。
3.顺序表的优点
①可进行随机访问即可通过首地址和元素序号可以在O(1)时间内找到指定的元素;
②存储密度高,每个结点只存数据元素。
4.顺序表的缺点
①元素的插入和删除需要移动大量的元素,插入操作平均需要移动 n/2 个元素,删除操作平均需要移动(n-1)/2个元素;
②顺序存储分配需要一段连续的存空间,不够灵活;