12.21

继续完成数据结构实验部分
一、实验中遇到的具体问题
线性表操作的细节漏洞:最初使用strncpy函数完成线性表的复制和初始化,编译器出现 “字符串截断” 警告,原因是strncpy在拷贝长度等于字符串长度时,不会自动添加终止符\0,可能导致后续字符串比较出错。
多个可能解的字典序匹配错误:测试点 4(多个可能解)多次答案错误,核心问题是反转函数的边界条件设置不当(初始写为start >= end时直接返回),导致start == end的区间(单元素反转,等价于无操作)未被检测;同时遍历逻辑虽理论上按字典序,但未确保 “找到第一个匹配解立即返回”,可能匹配到更大的区间。
输入处理的兼容性问题:未考虑不同系统的换行符差异(Windows 为\r\n,Linux 为\n),导致输入序列中残留换行符,干扰序列合法性校验和长度判断。
边界场景的遗漏:最初未校验空序列、非法字符(如含X/Y的序列),以及原始与目标序列长度不一致的情况,导致部分边界测试点未通过。
二、问题的解决方法
修复线性表操作的字符串问题:彻底抛弃strncpy,改用逐字符遍历赋值或memcpy完成线性表的初始化和复制,显式设置字符串终止符\0,消除编译器警告,保证序列存储的准确性。
严格保证字典序最小解的匹配:
修正反转函数的边界条件:仅过滤start > end的无效区间,保留start == end的情况(单元素区间反转),确保原始序列与目标序列一致时能匹配到(0,0);
优化遍历逻辑:外层循环start从 0 开始递增,内层循环end从start开始递增,找到第一个匹配的(start, end)立即输出并返回,杜绝后续更大区间的干扰。
增强输入处理的鲁棒性:使用strcspn函数清除输入字符串中的\n和\r,兼容不同系统的换行符;增加空序列、非法字符的校验逻辑,确保输入合法性。
完善边界场景处理:在核心检测逻辑前,先校验原始与目标序列的长度是否一致,不一致直接返回(-1,-1);补充序列合法性校验函数,仅允许A/T/C/G四种字符,非法字符直接判定为无解。
三、实验设计思路与实验感想

  1. 实验设计思路
    本次实验的核心目标是检测目标基因序列是否可通过对原始序列单次子序列倒位得到,设计思路分为三层:
    基础层(线性表封装):用数组模拟线性表,封装初始化、复制、反转、比较等基本操作,符合题目 “使用线性表存储基因序列” 的要求,同时保证操作的独立性和可复用性;
    校验层(合法性检测):先完成输入格式、序列字符、长度的校
posted @ 2025-12-23 23:35  山蚯  阅读(3)  评论(0)    收藏  举报