【DS专题活动】第九期(11月24日~11月30日)解答
以下是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;
}
第一题:假设某个单向循环链表的长度大于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;
}
...全文
相关推荐
信捷 DS系列伺服驱动器产品样本(2014-10-30更新).zip
《信捷 DS系列伺服驱动器产品样本》是一个详细介绍信捷公司DS系列伺服驱动器的资料集,该资料在2014年10月30日进行了更新,旨在为用户提供最新的产品信息和技术参数。
MSP432自主开发笔记4:DS3115舵机的0~180全角度驱动
今日学习一款全角度15KG大扭力舵机的驱动,最近电赛学习任务紧,更新一篇比较水的文章: 文章提供原理解释,全部代码,整体工程
DS918 6.24-25556版本引导与系统安装完整包
用于加速快照浏览与恢复操作。该服务由。
DS-160表格填写常见问题解答.doc
《DS-160表格填写常见问题解答》DS-160表格是美国非移民签证申请的重要组成部分,填写过程需要特别注意。以下是一些关键的知识点:1.
DS_160表格填写常见问题解答.doc
【DS-160表格填写常见问题解答】DS-160表格是美国非移民签证申请过程中的必备文件,必须在线填写。以下是关于DS-160表格填写的一些常见问题和答案:1.


