先简化问题,线性表数据元素为int类型,表示学生成绩,编写顺序表定义、初始化、插入、删除、查找
时间: 2024-09-14 18:12:07 浏览: 48
线性表是一种基本的数据结构,用于存储一组有序的元素,这里我们将其设计成包含整数成绩的学生顺序表。以下是顺序表的一些基础操作:
**顺序表定义**:
```c++
// 假设顺序表使用数组实现
typedef struct {
int* data; // 成绩数据指针
int size; // 当前元素个数
int capacity; // 容量,即数组大小
} StudentSequenceList;
```
**初始化**:
```c++
StudentSequenceList initStudentList(int capacity) {
StudentSequenceList list;
list.data = (int*)malloc(capacity * sizeof(int));
list.size = 0;
list.capacity = capacity;
return list;
}
```
**插入**:
```c++
void insert(StudentSequenceList& list, int index, int score) {
if (index < 0 || index > list.size) {
printf("插入位置无效.\n");
return;
}
if (list.size == list.capacity) {
list.capacity *= 2; // 如果满,扩容一倍
list.data = (int*)realloc(list.data, list.capacity * sizeof(int));
}
memmove(&list.data[index+1], &list.data[index], sizeof(int) * (list.size - index)); // 移动元素
list.data[index] = score;
list.size++;
}
```
**删除**:
```c++
void delete(StudentSequenceList& list, int index) {
if (index < 0 || index >= list.size) {
printf("删除位置无效.\n");
return;
}
memmove(&list.data[index], &list.data[index+1], sizeof(int) * (list.size - index - 1)); // 移动元素
list.size--;
if (index == list.size && list.size < list.capacity / 4) { // 空闲空间大于四分之一时,缩小容量
list.capacity /= 2;
list.data = (int*)realloc(list.data, list.capacity * sizeof(int));
}
}
```
**查找**:
```c++
int search(const StudentSequenceList& list, int targetScore) {
for (int i = 0; i < list.size; i++) {
if (list.data[i] == targetScore)
return i; // 找到则返回索引
}
return -1; // 没找到返回-1
}
```
阅读全文