以下是根据SCAU(华南农业大学)数据结构实验1的相关内容整理的综合实验报告框架及示例,结合了顺序线性表的基本操作实现与分析,主要参考了实验题目、代码实现及设计思路:
数据结构实验报告(实验一:顺序线性表的基本操作)
学院:数学与信息学院
专业:软件工程/信息管理与信息系统
日期:2025年03月30日
一、实验目的
1. 掌握顺序线性表的存储结构定义及初始化方法。
2. 实现顺序表的插入、删除、遍历等基本操作。
3. 理解动态内存分配及数据元素移动的原理。
4. 验证算法的时间复杂度与空间复杂度。
二、实验内容
实现以下功能模块:
1. 顺序表初始化:构造空表并分配初始内存。
2. 元素插入:在指定位置前插入新元素,处理表满时的扩容。
3. 元素删除:删除指定位置元素并返回其值,动态缩容优化空间。
4. 遍历输出:打印当前顺序表中所有元素。
5. 交互式主程序:支持用户通过菜单选择操作。
三、设计思路与关键代码
1. 结构定义与初始化
define LIST_INIT_SIZE 100 // 初始容量
define LISTINCREMENT 10 // 扩容增量
typedef struct {
int elem; // 存储数组指针
int length; // 当前元素个数
int listsize; // 当前总容量
} SqList;
int InitList_Sq(SqList &L) {
L.elem = (int)malloc(LIST_INIT_SIZE sizeof(int));
if (!L.elem) return ERROR; // 内存分配失败
L.length = 0;
L.listsize = LIST_INIT_SIZE;
return OK;
说明:使用动态内存分配初始化顺序表,初始容量为100,长度置0。
2. 插入操作
int ListInsert_Sq(SqList &L, int i, int e) {
if (i < 1 || i > L.length + 1) return ERROR; // 位置非法
if (L.length >= L.listsize) { // 扩容
int newbase = (int)realloc(L.elem, (L.listsize + LISTINCREMENT) sizeof(int));
if (!newbase) return ERROR;
L.elem = newbase;
L.listsize += LISTINCREMENT;
for (int j = L.length; j >= i; j--) // 元素后移
L.elem[j] = L.elem[j-1];
L.elem[i-1] = e;
L.length++;
return OK;
时间复杂度:最坏情况为O(n)(插入表头需移动n个元素),平均O(n/2)。
3. 删除操作
int ListDelete_Sq(SqList &L, int i, int &e) {
if (i < 1 || i > L.length) return ERROR;
e = L.elem[i-1];
for (int j = i; j < L.length; j++) // 元素前移
L.elem[j-1] = L.elem[j];
L.length--;
// 缩容优化:当利用率低于50%且容量大于初始值时
if (L.length <= L.listsize/2 && L.listsize > LIST_INIT_SIZE) {
L.elem = (int)realloc(L.elem, (L.listsize/2) sizeof(int));
L.listsize /= 2;
return OK;
空间优化:删除后动态缩容,避免空间浪费。
4. 遍历输出
int Load_Sq(SqList &L) {
if (L.length == 0) printf("The List is empty!
);
else {
printf("The List is: ");
for (int i = 0; i < L.length; i++)
printf("%d ", L.elem[i]);
printf("
);
return OK;
四、实验结果
测试用例与输出示例:
1:Insert element
2:Delete element
3:Load all elements
0:Exit
Please choose: 1
输入插入位置和值:2 50
The Element 50 is Successfully Inserted!
选择3查看当前表:The List is: 10 50 30
五、实验总结
1. 核心收获:通过实现顺序表的动态扩容与缩容,深入理解了线性表的顺序存储特性及内存管理机制。
2. 问题解决:插入/删除操作中的元素移动易引发逻辑错误,需严格验证边界条件(如i的合法性)。
3. 优化建议:可结合链式结构减少元素移动次数,或引入更高效的内存管理策略(如块状分配)。
六、参考文献
1. 华南农业大学数据结构实验答案(顺序线性表操作)
2. SCAU数据结构实验1 AC代码及解析
3. 《数据结构》实验指导书(肇庆学院)
完整代码及实验报告模板可参考:[Gitee仓库] 或 CSDN博客。