顺序表的静态分配的基本操作实现代码
#include <stdio.h>
// 顺序表存储空间静态分配
#define MaxSize 10 // 定义最大长度
typedef int ElemType; // int类型重命名为ElemType,方便后续调整
typedef struct { // 定义结构体
ElemType data[MaxSize]; // 用静态的数组存放数据元素
ElemType length; // 数组长度
} SqList;
void InitList(SqList &L) { // 初始化顺序表
for (int i = 0; i < MaxSize; i++) { // 设置数据元素的默认值,否则内存中会有遗留的“脏数据”
L.data[i] = 0;
}
L.length = 0; // 长度赋值,没有设置数据元素的默认值
}
//按位插入数据
int InsertList(SqList &L, ElemType i, ElemType e) {
if (i < 1 || i > L.length + 1) { // 判断插入是否合理
return false;
}
if (L.length >= MaxSize) { // 判断插入是否合理
return false;
}
for (ElemType j = L.length; j >= i; j--) { // 循环从最后一位开始,到插入的位序,减减
L.data[j] = L.data[j - 1]; // 将前一位值向后移一位
}
L.data[i - 1] = e; // 插入的位置附上要插入的值,注意数组下标和位序是相差一位的
L.length++; // 插入一个元素之后,数组的长度是要加1
return true;
}
int DeleteList(SqList &L, ElemType i, ElemType &e) {
if (i < 1 || i > L.length + 1) { // 判断删除是否合理
return false;
}
e = L.data[i - 1]; // 删除的数据,注意数组的下标和位序的关系
for (ElemType j = i; j < L.length; j++) { // 循环从要删除的位序开始,结束条件为到数组长度减一位的位置
L.data[j] = L.data[j + 1]; // 将删除位序的值向前移动
}
L.length--; // 删除一个元素之后,数组的长度是要减1
return true;
}
//按位查询
int GetList(SqList L, int i) {
if (i < 0 || i > L.length)
return 0;
return L.data[i - 1]; // 位序和数组下标少一位
}
//按值查询
int LocateList(SqList L, int e) {
for (int i = 0; i < L.length; i++) {
if (L.data[i] == e) {
return i + 1; // 返回位序和数组下标相差一位
}
}
return 0;
}
//修改第i个元素为e
int AlterList(SqList &L, int i, int e) {
if (i < 0 || i > L.length - 1)
return 0;
L.data[i - 1] = e;
return 1;
}
//判断顺序表是否为空
bool IsEmpty (SqList L) {
if (L.length == 0)
return true;
return false;
}
//判断顺序表是否为满
bool IsFull(SqList L) {
if (L.length == MaxSize)
return true;
return false;
}
//打印数据
void PrintList(SqList L) {
for (ElemType i = 0; i < L.length; i++) {
printf("data[%d]=%d\n", i, L.data[i]);
}
}
//主函数
int main() {
SqList L; // 初始化
L.length = 6;
for (ElemType i = 0; i < 6; i++) { // 数组赋值
L.data[i] = i;
}
int e;
printf("删除flag=%d\n", DeleteList(L, 5, e));
PrintList(L);
printf("插入flag=%d\n", InsertList(L, 2, 66));
PrintList(L);
printf("修改flag=%d\n", AlterList(L, 1, 88));
PrintList(L);
printf("按位查找第5位的值为%d\n", GetList(L, 5));
printf("按值查找66,位序为%d\n", LocateList(L, 66));
printf("顺序表是否为空%d\n", IsEmpty(L));
printf("顺序表是否为满%d\n", IsFull(L));
}
运行结果如图所示