首页 > 其他 > 详细

线性表总结

时间:2019-03-25 22:33:57      阅读:186      评论:0      收藏:0      [点我收藏+]

1.代码一

1:功能:对于含有n个结点的单链表L1,将L1拆分成两个不带头结点的单链表L1,L2,其中L1含有原来的前n/2个结点,L2含有余下的结点

void fun1(LinkNode *&L1,LinkNode * &L2)//①
{
int n=0,i;//②
LinkNode *p=L1;//③
while(p!=NULL)//④
{
n++;//⑤
p=p->next;//⑥使p中的结点都移向下一个结点
}
p=L1;//⑦
for(i=1;i<n/2;i++)//⑧
p=p->next;//⑨
L2=p->next;//⑩
p->next=NULL;//?
}

2.第八到十行:对结点如何进行拆分的语法看不太懂

2,代码二

1.功能:存在3个带头结点的单链表LA,LB,LC的结点均依元素值递增排列,此算法使操作后的链表LA中仅剩下3个表中均包含的数据元素结点,且没有数据值相同的结点,并释放LA中所有的无用结点。

void Commonode(LinkNode * &LA,LinkNode * &LB,LinkNode *LC)//①
{
LinkNode *pa=LA->next,*pb=LB->next,*pc=LC->next,*q,*r;//②
LA->next=NULL;//③此时是LA作为新建单链表的头结点
r=LA;//④r始终指向新单链表的尾结点
while(pa!=NULL)//⑤查找均包含的公共结点并建立新链表
{
while(pb!=NULL&&pa->data>pb->data)//⑥将pa中结点与LB中的pb结点进行比较
pb=pb->next;//⑦
while(pc!=NULL&&pa->data>pc->data)//⑧将pa结点与LC中的pc结点进行比较
pc=pc->next;//⑨
if(pb!=NULL&&pc!=NULL&7pa->data==pb->data&&pa->data==pc->data)//⑩若pa是公共结点
{
r->next=pa;//?将pa结点插入到LA中
r=pa;//?
pa=pa->next;//?
}
else//?
{q=pa;//?
pa=pa->next;//?
free(q);//?
}
}
r->next=NULL//?尾结点的next域置空
}

2.第六到九行:分别将pa结点与LB,LC中pb,pc进行比较后的操作和语法不太明白结点是怎么变换和操作的

  第14到第17行,对删除的操作语法不太懂

3.自己理解:先以单链表LA的头结点作为一个空表,r指向这个新建单链表的尾结点。以pa扫描单链表LA的数据结点,判断它是否在单链表LB和LC中,若同时在LB和LC中,表示pa所指结点是公共元素,则将其链接到r所指结点之后,否则删除之。

线性表总结

原文:https://www.cnblogs.com/LHerr/p/10596452.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!