顺序表
1. 静态分配
-
定义类型
typedef struct { int data[MaxSize]; // 用静态数组存放数据元素 int length; //顺序表当前长度 } SqList;
-
初始化
void InitList(SqList &L) { for (int i = 0; i < MaxSize; i++) L.data[i] = 0; //将所有元素设置默认初始值 //L.length = 0; //顺序表长度为0 }
-
插入数据
bool ListInsert(SqList &L, int i, int e) { //判断1:输入的i符合要求 if (i < 1 || i > L.length + 1) return false; //判断2:存储空间是否存满 if (L.length >= MaxSize) return false; //如没有问题按一下步骤正式执行 for (int j = L.length; j >= i; j--) { //j为数据的个数,早在i的位置加一个新的数,那么(i-最后一个数)会向后移动一位,所以对这个范围内的数进行处理 L.data[j] = L.data[j - 1]; //将数据后移一位 } L.data[i - 1] = e; //在i上插入一个新的数据 L.length++; return true; //长度加1 }
-
删除
bool ListDelete(SqList &L, int i) { //判断1:输入的i符合要求 if (i < 1 || i > L.length + 1) return false; //返回要删除元素的值 int e; e = L.data[i - 1]; //要删除的是第出、个元素,但是在数组中是从0开始,所以要减一个1 //如没有问题按一下步骤正式执行 // /* for (int j = L.length - 1; j > i; j--) { L.data[j - 1] = L.data[j]; } L.length--; printf("删除的元素是%d\n", e); return true; */ for (int j = i; j < L.length; j++) L.data[j - 1] = L.data[j]; L.length--; return true; }
-
按值查找
int LocateElemV(SqList L, int e) { int i; for (i = 0; i < L.length; i++) { if (L.data[i] == e) return i + 1; } return 0; }
-
按位查找
int LocateElemW(SqList L, int i) { int *p; p = &L.data[0]; for (int j = 1; j < i; j++) { p++; } return *p; }
注意:
- 了解位序与数组下标之间的差别
- sizeof(数据类型) 可以看到其所占用的大小
- 了解指针用法
- 了解数据结构
- 判断两个数据结构类型是否相等不能直接用“==”,应该比较其中的每一个元素