【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;
}
...全文
117 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

【更新至2025年】2001-2025年上市公司数字化转型年报词频统计(吴非、赵宸宇、甄红线)(300+年报词频统计) 1、时间:2001-2025年 2、来源:上市公司年报 3、参考文献:企业数字化转型与资本市场表现——来自股票流动性的经验证据(吴非) 数字化转型如何影响企业全要素生产率(赵宸宇) 知识产权行政保护与企业数字化转型(甄红线) 4、方法说明:(1)参考吴非老师的做法,对人工智能技术、大数据技术、云计算技术、区块链技术、数字技术运用五个维度76个数字化相关词频进行统计 (2)参考赵宸宇老师的做法,对数字技术应用、互联网商业模式、智能制造、现代信息系统四个维度99个数字化相关词频进行统计 (3)参考甄红线老师的做法,对技术分类、组织赋能、数字化应用等类别下139个数字化相关词频进行统计 5、指标:年份、股票代码、公司简称、行业名称、行业代码、全文-文本总长度、仅中英文-文本总长度、人工智能技术-吴、大数据技术-吴、云计算技术-吴、区块链技术-吴、数字技术运用-吴、数字技术应用-赵、互联网商业模式-赵、智能制造-赵、现代信息系统-赵、技术分类-人工智能技术-甄、技术分类-区块链技术-甄、技术分类-云计算技术-甄、技术分类-大数据技术-甄、组织赋能-人工智能技术-甄、组织赋能-云计算技术-甄、组织赋能-大数据技术-甄、组织赋能-广义数字技术-甄、数字化应用-技术创新-甄、数字化应用-流程创新-甄、数字化应用-业务创新-甄、人工智能、商业智能、图像理解、投资决策辅助系统、智能数据分析、智能机器人、机器学习、深度学习、语义搜索、生物识别技术、人脸识别、语音识别、身份验证、自动驾驶、自然语言处理、大数据、数据挖掘、文本挖掘、数据可视化、异构数据、征信、增强现实、混合现实、虚拟现实、云计算、流计算、图计算、内存计算、多方安全计算、类脑计算、绿色计算、认知计算等300+词频

33,026

社区成员

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

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