先简化问题,线性表数据元素为int类型,表示学生成绩,编写顺序表定义. 初始化、插入、删除、查找: 源代码要有详细注释zhou_sqlist.c
时间: 2024-09-10 19:07:34 浏览: 41
以下是一个简化版的线性表操作的C语言源代码示例,包括初始化、插入、删除和查找操作,数据元素类型为int,代表学生成绩。
```c
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 100 // 定义线性表的最大长度
// 定义顺序表的结构体
typedef struct {
int data[MAXSIZE]; // 存储数据元素的数组
int length; // 顺序表当前长度
} SeqList;
// 初始化顺序表
void InitList(SeqList *L) {
// 初始化长度为0
L->length = 0;
}
// 在顺序表L中的第i个位置插入新元素e
int ListInsert(SeqList *L, int i, int e) {
// 插入位置不合法
if (i < 1 || i > L->length + 1) {
return 0;
}
// 顺序表已满,无法插入
if (L->length == MAXSIZE) {
return 0;
}
// 插入位置不在表尾时,将第i个位置及之后的元素后移
if (i <= L->length) {
for (int k = L->length - 1; k >= i - 1; k--) {
L->data[k + 1] = L->data[k];
}
}
// 在位置i处放入新元素
L->data[i - 1] = e;
// 长度加1
L->length++;
return 1; // 插入成功
}
// 删除顺序表L中的第i个元素,并用e返回其值
int ListDelete(SeqList *L, int i, int *e) {
// 删除位置不合法
if (i < 1 || i > L->length) {
return 0;
}
// 将第i个位置之后的元素前移
*e = L->data[i - 1];
for (int k = i; k < L->length; k++) {
L->data[k - 1] = L->data[k];
}
// 长度减1
L->length--;
return 1; // 删除成功
}
// 在顺序表L中查找元素e,返回其在表中的位置
int LocateElem(SeqList L, int e) {
for (int i = 0; i < L.length; i++) {
if (L.data[i] == e) {
return i + 1; // 返回元素的位置(位置从1开始计数)
}
}
return 0; // 查找失败
}
int main() {
SeqList L;
InitList(&L); // 初始化顺序表
// 插入元素
ListInsert(&L, 1, 95);
ListInsert(&L, 2, 85);
ListInsert(&L, 3, 75);
// 删除元素
int deletedValue;
if (ListDelete(&L, 2, &deletedValue)) {
printf("Deleted value: %d\n", deletedValue);
} else {
printf("Deletion failed.\n");
}
// 查找元素
int pos = LocateElem(L, 75);
if (pos) {
printf("Element found at position: %d\n", pos);
} else {
printf("Element not found.\n");
}
return 0;
}
```
请注意,代码的健壮性和边界条件检查应根据实际应用场景做进一步的增强和测试。上述代码只是一个简单的示例,不包含所有可能的错误检查和异常处理。
阅读全文