顺序表是一种简单的线性结构,逻辑上相邻的数据在计算机内的存储位置也是相邻的,可以快速定位第几个元素,中间不允许有空值,插入、插入时需要移动大量的元素。
1.elems记录存储位置的基地址
2.分配一段连续的存储空间size
3.用length记录实际的元素长度,即顺序表的长度,与size不一定相等,因为空间预留着,不一定存储着数据。
定义如下:
template <Typename ElemType>
struct _Sqlist{
ElemType* elems;
int length;
int size;
};
假定ElemType 为int类型
bool initList(SqList& L) {
L.elems = new int[MAX_SIZE]; //为顺序表分配MAX_SIZE个int元素的空间
if (!L.elems) return false; //分配空间失败 返回false
L.length = 0;
L.size = MAX_SIZE;
return true;
}
bool listAppend(SqList& L, int e) {
if (L.size == L.length) {
return false; //存储空间已满,返回false
}
L.elems[L.length++] = e;
return true;
}
bool listInsert(SqList& L,int index,int e){ //在已有的元素中间插入一个元素,index表示下标,即第index+1个元素
if (index < 0 || index >= L.length) {
return false; //index 的值不合法,返回false
}
if (L.length == L.size) {
return false; //存储空间满了,返回false
}
for (int j = L.length - 1;j >= index;j--) {
L.elems[j + 1] = L.elems[j];
}
L.elems[index] = e;
L.length += 1;
return true;
}
bool listDelete(SqList& L, int index) {
if (index<0 || index>L.length - 1) {
return false; //检查index的合法性
}
for (int j = index + 1;j <= L.length - 1;j++) {
L.elems[j - 1] = L.elems[j];
}
L.length -= 1;
return true;
}
void listDestroy(SqList& L) {
if (L.elems) {
delete[]L.elems;//删除动态内存
}
L.size = 0;
L.length = 0;
}
就这样
原文:https://www.cnblogs.com/Ybossy/p/12790533.html