【DS专题活动】第九期(11月24日~11月30日)解答

短歌如风 2003-12-02 03:52:18
以下是B组解答:
第一题:假设某个单向循环链表的长度大于1,且表中既无头结点也无头指针;已知s为指向链表中某个结点的指针,编写算法在链表中删除指针s所指结点的前驱结点。
CLinkList Delete_pre(CLinkList s)
{
CLinkList p, pre;
assert(s != NULL && s->next != s);//假设链表长度大于1
pre = s;
p = pre->next;
while(p -> next != s)
{
pre = p;
p = pre->next
}
pre->next = p->next;
free(p);
return s;
}
第二题:已知有一个单向循环链表,其每个结点中有三个域:pre、data和next,其中data为数据域,next为指向后继结点的指针域,pre也为指针域,但它的值为空(NULL),编写算法将此单向循环链表改为双向循环链表。

DuLinkList Create_pre(DuLinkList L)
{
DuLinkList p = L;
while(L->next != p)
{
L->next->pre = L;
L = L->next;

}
L->next->pre = L;
return p;
}

第三题:已知由一个线性链表表示的线性表中含有三类字符的数据元素(如:字母字符、数字字符和其他字符),编写算法将该线性表分割为三个循环链表,其中每个循环链表表示的线性表中均只含一类字符。
void (LinkList L, CLinkList* A, CLinkList* B, CLinkList* c)
{
LinkList s = L;
LNode HeadA, HeadB, HeadC;
LinkList LastA = &HeadA, LastB = &HeadB, LastC = &HeadC;
HeadA.next = HeadB.next = HeadC.next = NULL;

while(s != NULL)
{
if(IsNumeric(s->data))
LastA->next = s;
else if(IsAlpha(s->data))
LastB->next = s;
else
LastC->next = s;
s = s->next;
}
LastA->next = HeadA.next;
LastB->next = HeadB.next;
LastC->next = HeadC.next;
*A = HeadA.next;
*B = HeadB.next;
*C = HeadC.next;
}
...全文
116 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
短歌如风 2003-12-02
  • 打赏
  • 举报
回复
楼上两位说的对,还漏了几句。上周比较忙,
第三题:已知由一个线性链表表示的线性表中含有三类字符的数据元素(如:字母字符、数字字符和其他字符),编写算法将该线性表分割为三个循环链表,其中每个循环链表表示的线性表中均只含一类字符。
void (LinkList L, CLinkList* A, CLinkList* B, CLinkList* c)
{
LinkList s = L;
LNode HeadA, HeadB, HeadC;
LinkList LastA = &HeadA, LastB = &HeadB, LastC = &HeadC;
HeadA.next = HeadB.next = HeadC.next = NULL;

assert(A != NULL && B != NULL & C != NULL);
while(s != NULL)
{
if(IsNumeric(s->data))
{
LastA->next = s;
LastA = s;
}
else if(IsAlpha(s->data))
{
LastB->next = s;
LastB = s;
}
else
{
LastC->next = s;
LastC = s;
}
s = s->next;
}
LastA->next = HeadA.next;
LastB->next = HeadB.next;
LastC->next = HeadC.next;
*A = HeadA.next;
*B = HeadB.next;
*C = HeadC.next;
}
这样才对。

关于用指针还是引用代表“变参”,在C++中我喜欢用引用,这样就不用对输入的指针是否有效进行检验了。而在C中只好用指针了。

xiaoyige886 2003-12-02
  • 打赏
  • 举报
回复
第三题:
少了
LastA->next = s;
LastA = s;

to plainsong
用 CLinkList* A ,和 CLinkList& A,一个是指向指针的指针,一个是指针的引用
他们的差别大吗? 您比较倾向与用哪一种?

哈哈,我基础不过关? 对了,您收不收徒弟呀? 如果要的话,我以后就跟您混了!
tristsesame 2003-12-02
  • 打赏
  • 举报
回复
应该有
LastA = LastA->next
...
LastB = LastB->next
...
LastC = LastC->next

内容概要:本文系统介绍了基于MATLAB平台的风力涡轮机雷达信号仿真研究,涵盖完整的仿真代码、实测数据及配套学术文章,重点实现雷达信号处理、风力涡轮机回波建模、微动特征提取与时频分析等核心技术。通过高精度模拟风机叶片旋转引起的调制效应与雷达散射截面变化,深入揭示风力发电场对周边雷达系统造成的电磁干扰机制,为雷达杂波抑制、目标检测优化及空域兼容性设计提供理论支撑与技术验证平台。资源内容还可拓展应用于无人机路径规划、电动汽车调度、电力系统优化等交叉领域,展现MATLAB在复杂系统仿真中的强大集成能力。; 适合人群:具备MATLAB编程基础与雷达信号处理知识的科研人员,适用于从事新能源并网影响评估、雷达系统设计、电磁兼容分析、智能电网或远程 sensing 领域研究的研究生、工程师及高校教师; 使用场景及目标:①开展风电场对空中监视雷达干扰效应的仿真评估;②研究风电杂波的时频特性与微多普勒特征建模方法;③开发针对非合作目标干扰的雷达抗干扰算法与信号分离技术;④作为科研项目申报、论文复现或工程预研的技术原型工具包; 阅读建议:建议结合百度网盘提供的完整资料包(含代码、数据集与参考文献)同步学习,优先运行示例脚本以掌握仿真流程,再根据具体研究需求调整系统参数进行扩展实验,同时可借鉴文中提到的其他MATLAB仿真案例以提升研究深度与广度。

33,026

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧