#include <stdlib.h>
//动态分配
#define InitSize 10//默认最大长度
typedef struct{
int *data;//指示动态分配数组的指针(指向malloc分配的内存空间的起始地址)
int MaxSize;//顺序表的最大容量
int length;//顺序表当前的长度
} SeqList;
//动态分配初始化
void InitList(SeqList &L){
//用malloc申请一片连续的存储空间
L.data = (int *)malloc(InitSize*sizeof(int));
L.length = 0;
L.MaxSize = InitSize;
}
//增加动态数组的长度
void IncreaseSize(SeqList &L, int len){
int *p = L.data;//定义指针p,把data表的值赋给p,p和data指向同一个位置
L.data = (int *)malloc((L.MaxSize+len)*sizeof(int));
for(int i=0; i<L.length; i++){
L.data = p[i];//将数据复制到新区域
}
L.MaxSize = L.MaxSize+len;
free(p);//释放原内存空间
}
//静态分配
#define MaxSize 10
typedef struct{
int data[MaxSize];
int length;
} SqList;
//静态分配初始化
void InitList(SqList &L){
L.length = 0;
}
//基于静态分配的插入
bool ListInsert(SqList &L, int i, int e){
if(i<1 || i>L.length+1){//判断i的范围,不可隔空插入
return false;
}
if(L.length>=MaxSize){//判断存储空间是否已满
return false;
}
for(int j=L.length; j>=i; j--){
L.data[j] = L.data[j-1];
}
L.data[i-1] = e;
L.length++;
return true;
}
//基于静态分配的删除
bool ListDelete(SqList &L, int i, int &e){
if(i<1 || i>L.length){
return false;
}
e = L.data[i-1];
for(int j=i; j<L.length; j++){
L.data[j-1] = L.data[j];
}
L.length--;
return true;
}
//基于静态分配的按位查找
2021-09-24线性表-顺序表
最新推荐文章于 2022-04-02 22:45:57 发布