顺序表的三个要素
用 elems 记录存储位置的基地址
分配一段连续的存储空间 size
用 length 记录实际的元素个数,即顺序表的长度
算法实现
结构定义
typedef struct {
int* elem; //顺序表基地址
int len; //顺序表长度
int size; //顺序表空间
}SqList;
初始化
bool initSqList(SqList& L) {
L.elems = new ElemType[MAX_SIZE];
if (!L.elems)return false;
L.len = 0;
L.size = MAX_SIZE;
return true;
}
增加元素
bool appendList(SqList& L, ElemType e) {
if (L.len == MAX_SIZE) return false;
L.elems[L.len] = e;
L.len++;
return true;
}
插入元素
bool insertList(SqList& L, int pos, ElemType e) {
if (pos < 0 || pos >= L.len) return false;
if (L.len == MAX_SIZE) return false;
for (int i = L.len - 1; i >= pos; i--) {
L.elems[i + 1] = L.elems[i];//从最后一个元素开始后移,直到第pos个元素后移
}
L.elems[pos] = e;
L.len++;
return true;
}
删除元素
bool deleteList(SqList& L, int pos) {
if (pos < 0 || pos >= L.len) return false;
//删除最后一个元素
if (pos == L.len - 1) {
L.len--;
return true;
}
//删除非末尾元素
for (int i = pos; i < L.len - 1; i++) {
L.elems[i] = L.elems[i + 1];
}
L.len--;
return true;
}
销毁元素
void destroyList(SqList& L) {
if (L.elems) delete[]L.elems;
L.len = 0;
L.size = 0;
}
测试
int main() {
ElemType val;
int pos;
SqList L;
initList(L);
cout << "SqList Initalizing..." << endl;
//1. 初始化
if (initList(L)) {
cout << "Initalize sucessfully !" << endl;
}
//2. 添加元素
int count = 0;
cout << "请输入要添加的元素个数:";
cin >> count;
for (int i = 0; i < count; i++) {
cout << "\nInput your value: ";
cin >> val;
if (appendList(L, val)) {
cout << "Append sucessfully !" << endl;
}
else {
cout << "Append failed" << endl;
}
}
printList(L);
//3. 插入元素
cout << "Input your value's position and value: ";
cin >> pos >> val;
if (insertList(L, pos, val)) {
cout << "Insert sucessfully !" << endl;
}
else {
cout << "insert failed" << endl;
}
printList(L);
//4. 删除元素
cout << "Input delete position: ";
cin >> pos;
if (deleteList(L, pos)) {
cout << "delete sucessfully !" << endl;
}
else {
cout << "delete failed" << endl;
}
printList(L);
//5. 销毁
cout << "destroy SqList..." << endl;
destroyList(L);
return 0;
}