顺序表和数组十分相似,添加数据时需要先判断数据插入的位置是否合法,然后从后往前(防止前面的数据将后面的覆盖)将插入位置之后的数据元素后移1位。
删除首先也是判断删除的位置是否合法,将要删除的数据保存在一个变量中(方便日后查找),接着从前往后(防止后面的数据覆盖前面的数据)将被删除元素之后的元素前移1位。
查找数据遍历所有数据元素,找到合适的在返回他的位置。
include
using namespace std;
const int MAXSIZE = 100; // 定义最大容量
typedef int ElemType; // 定义元素类型
struct SqList {
ElemType elem[MAXSIZE]; // 存储元素的数组
int length; // 当前元素的个数
};
// 获取元素
int GetElem(SqList L, int i, ElemType &e) {
if (i < 1 || i > L.length) {
return 0; // 位置不合法
} else {
e = L.elem[i - 1]; // 获取元素
return 1; // 成功
}
}
// 定位元素
int LocateElem_Sq(SqList L, ElemType e) {
for (int i = 0; i < L.length; i++) {
if (L.elem[i] == e) {
return i + 1; // 返回元素的位置
}
}
return 0; // 没有找到元素
}
// 插入元素
int ListInsert_Sq(SqList &L, int i, ElemType e) {
if (i < 1 || i > L.length + 1) {
return 0; // 位置不合法
}
if (L.length == MAXSIZE) {
return 0; // 存储空间已满
}
// 从后往前移动元素,为插入腾出位置
for (int j = L.length - 1; j >= i - 1; j--) {
L.elem[j + 1] = L.elem[j];
}
L.elem[i - 1] = e; // 插入元素
++L.length; // 更新长度
return 1; // 成功
}
// 删除元素
int ListDelete_Sq(SqList &L, int i) {
if (i < 1 || i > L.length) {
return 0; // 位置不合法
}
// 保存删除的元素
ElemType a = L.elem[i - 1];
// 从前往后移动元素,覆盖要删除的元素
for (int j = i; j < L.length; j++) {
L.elem[j - 1] = L.elem[j];
}
--L.length; // 更新长度
return 1; // 成功
}
// 输入列表
void ListInput(SqList &L) {
int LENGTH;
cin >> LENGTH; // 输入列表长度
L.length = LENGTH; // 更新列表长度
for (int i = 0; i < LENGTH; i++) {
cin >> L.elem[i]; // 输入元素
}
}
// 输出列表
void ListOutput(SqList L) {
for (int i = 0; i < L.length; i++) {
cout << L.elem[i] << " "; // 输出元素
}
cout << endl; // 输出换行
}