数据结构实验报告、scau数据结构实验1

admin12025-07-04 01:15:02

以下是根据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));

数据结构实验报告、scau数据结构实验1

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博客。

文章下方广告位