顺序表的构建、插入、删除、查找、反转实现
时间: 2023-09-25 14:10:29 浏览: 89
1. 构建顺序表
构建顺序表需要定义一个数组和一个变量来表示当前顺序表中元素的个数。例如:
```
#define MAX_SIZE 100 // 定义顺序表最大容量
typedef struct {
int data[MAX_SIZE]; // 数组存储元素
int length; // 当前顺序表中元素个数
} SqList;
```
2. 插入元素
插入元素需要先判断顺序表是否已满,如果未满,则将插入位置及其后面的元素依次向后移动一个位置,然后将新元素插入到指定位置。例如:
```
bool insert(SqList *L, int pos, int elem) {
if (L->length >= MAX_SIZE) { // 判断是否已满
return false;
}
if (pos < 1 || pos > L->length + 1) { // 判断插入位置是否合法
return false;
}
for (int i = L->length; i >= pos; i--) { // 将插入位置及其后面的元素向后移动一个位置
L->data[i] = L->data[i - 1];
}
L->data[pos - 1] = elem; // 将新元素插入到指定位置
L->length++; // 顺序表长度加1
return true;
}
```
3. 删除元素
删除元素需要先判断顺序表是否为空,如果不为空,则将删除位置及其后面的元素依次向前移动一个位置,然后将最后一个元素删除。例如:
```
bool del(SqList *L, int pos) {
if (L->length == 0) { // 判断是否为空
return false;
}
if (pos < 1 || pos > L->length) { // 判断删除位置是否合法
return false;
}
for (int i = pos; i < L->length; i++) { // 将删除位置及其后面的元素向前移动一个位置
L->data[i - 1] = L->data[i];
}
L->length--; // 顺序表长度减1
return true;
}
```
4. 查找元素
查找元素需要遍历整个顺序表,找到指定元素的位置或者返回查找失败的标志。例如:
```
int search(SqList L, int elem) {
for (int i = 0; i < L.length; i++) {
if (L.data[i] == elem) {
return i + 1; // 返回元素位置
}
}
return 0; // 返回查找失败标志
}
```
5. 反转顺序表
反转顺序表需要将顺序表中的元素依次交换位置。例如:
```
void reverse(SqList *L) {
int i = 0, j = L->length - 1; // 定义左右指针
while (i < j) { // 左右指针相遇时结束循环
int temp = L->data[i];
L->data[i] = L->data[j];
L->data[j] = temp; // 交换元素
i++;
j--;
}
}
```
阅读全文