线性表总结

1.代码段1简介:采用二路归并法将有序表进行合并。

1.1代码1

void UnionList1(LinkNode * LA, LinkNode * LB, LinkNode &LC)
{ LinkNode pa=LA->next, * pb=LB-> next,r,
s; //1
LC=(LinkNode *)malloc( sizeof( LinkNode)); //2
r=LC; //3
while (pa!=NULL && pb!= NULL) //4
{ if (pa -> data< pb -> data) //5
{ s=(LinkNode * )malloc( sizeof(LinkNode); //6
s -> data= pa -> data; //7
r->next=s; //8
r=s; //9
pa=pa - next; //10
}
else
{ s =(LinkNode * )malloc(sizeof( LinkNode)); //11
s-> data=pb-> data; //12
r-> next=s;r= s; //13
pb= pb -> next; //14
}
}
while (pa!= NULL) //15
{ s=(LinkNode *) malloc(sizeof(LinkNode)); //16
s-> data=pa -> data; //17
r > next=s;r=s; //18
pa=pa->next; //19
}
while (pb!= NULL) //20
{ s= (LinkNode *) malloc(sizeof( LinkNode)); //21
s-> data= pb -> data; //22
r-> next=s;r= s; //23
pb=pb -> next; //24
}
r-> next= NULL; //25
}

2.不懂的地方:第3和第8句(包含有指针r的句子)。

语法不懂:为什么要定义一个指针*r指向LC,LC不是空链表么,为什么第8句不直接写成LC->next=s?
分析:该段代码在运行过程中分别扫描LA,LB两个有序表,比较LA,LB当前元素,讲其中较小的元素放入LC中,再从较小元素所在的有序表中取下一个元素。

2.代码段2简介:求两个有序表归并后的中位数

2.1代码2

ElemType M_Search(SqList *A,sQlist *B)
{ int i=0,j=0,k=0; //1
while(ilength&&jlength) //2
{ k++; //3
if(A->data[i]data[j]) //4
{ if(kA->length) //5
return A->data[i]; //6
i++; //7
}
else
{ if(k
B->length) //8
return B->data[j]; //9
j++; //10
}
}
}

2.2不懂得地方:2-10句,功能不懂。函数运行归并过程中会将相同的元素删除,为什么k=A->length时进行归并的那个元素就是中位数?

分析:分别扫描顺序表A,B,将较小的数取出后,被取数的顺序表指针往下指,再继续比较两个顺序表的大小,直到找出中位数。

posted on 2019-03-25 21:57  来颗橘子  阅读(109)  评论(0编辑  收藏  举报