一、前置准备工作
#include <iostream>
#define MaxSize 100
using namespace std;
typedef int ElemType;
typedef struct SqList {
ElemType data[MaxSize];
int length;
} SqList;
我们首先准备工作
1.设置静态数组的最大长度
2.为了方便C++的输入和输出 using namespace std;
3. 设置顺序表存储的数据类型
4.建立一个SqList的结构体
其中data用于存储数据 length用于记录当前顺序表长度
5.InitList 用于初始化数组
二、初始化顺序表
bool InitList(SqList &L) {
L.length = 0;
}
非常简单的顺序表初始化
我们只需要将长度设置为0即可;
我们可以省略这个循环步骤 这只是为了在初始化时候防止“脏数据”
但是我们添加的过程会实现“净化”
三、实现基本操作 ——增
bool insert(SqList &L, int i, ElemType e) {
if (i < 1 || i > L.length + 1)return false; //判断插入位置i是否在范围[1,length+1]
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; //索引号 需要用 位序-1
L.length++; // 完成后 增加1个位置
return true;
}
四、实现基本操作——删
bool Delete(SqList &L, int i, ElemType &e) {
if (i < 1 || i > L.length)return false;//判断插入位置i是否在范围[1,length]
e = L.data[i - 1]; //获取删除的元素
for (int j = i; j < L.length; j++) { // 进行 删前插后的 删前
L.data[j - 1] = L.data[j];
}
L.length--; // 减少数组长度
return true;
};
五、实现基本操作——查
int LocateElem(SqList L, ElemType e) {
int i;
for (i = 0; i < L.length; i++) {
if (L.data[i] == e)
return i + 1;
}
return 0;
}
六、其他
关于静态顺序表的销毁思路比较模糊需要记录
动态 Vs 静态
void DestroyList(SqList& L){
if (L.elem)
delete L.elem;
}
vs
要销毁静态顺序表,只需简单地释放数组所占用的内存空间。在C语言中,数组是静态分配的,无需显式释放。**********
其余的操作较容易实现 不在进行记录
以下是完整代码
#include <iostream>
#define MaxSize 100
using namespace std;
typedef int ElemType;
typedef struct SqList {
ElemType data[MaxSize];
int length;
} SqList;
bool InitList(SqList &L) {
L.length = 0;
}
bool insert(SqList &L, int i, ElemType e) {
if (i < 1 || i > L.length + 1)return false; //判断插入位置i是否在范围[1,length+1]
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; //索引号 需要用 位序-1
L.length++; // 完成后 增加1个位置
return true;
}
bool Delete(SqList &L, int i, ElemType &e) {
if (i < 1 || i > L.length)return false;//判断插入位置i是否在范围[1,length]
e = L.data[i - 1]; //获取删除的元素
for (int j = i; j < L.length; j++) { // 进行 删前插后的 删前
L.data[j - 1] = L.data[j];
}
L.length--; // 减少数组长度
return true;
};
int LocateElem(SqList L, ElemType e) {
int i;
for (i = 0; i < L.length; i++) {
if (L.data[i] == e)
return i + 1;
}
return 0;
}
void Print(SqList &L) {
for (int i = 0; i < L.length; i++) {
cout << L.data[i];
}
}
int main() {
ElemType elemType;
SqList L;
InitList(L);
insert(L, 1, 2);
insert(L, 2, 4);
insert(L, 3, 6);
int x = LocateElem(L, 4);
cout << x << endl;
Print(L);
Delete(L, 3, elemType);
cout << endl;
cout << elemType << endl;
Print(L);
return 0;
}