时间复杂度
就是程序的大概运行步骤数,用程序中的一些变量表示
3.1
/*print all element*/
void
PrintList(List L)
{
Position P;
P=L->Next;
if(!IsEmpty(L))
{
while(!IsLast(P))
{
printf("%d",P->Element);
P=P->Next;
}
}
}
3.2
时间复杂度为O(L+P),想象成2个游标,L随着P移动
/*L,P都是链表,包含升序排列的整数,打印L中那些由P指定位置上的元素*/
/*
//复杂了,如果不是按照升序排列,可以这么写
void
PrintLots(List L,List P)
{
int Index;
Position Lp,Pp;
Lp=L->Next;
Pp=P->Next;
int i;
while(!(IsLast(Pp)))
{
Index=Pp->Element;
for(i=0;i<Index;i++)
Lp=Lp->Next;
printf("%d",Lp->Element);
Lp=L->Next;
Pp=Pp->Next;
}
}
*/
void
PrintLots(List L,List P)
{
int Index=1;
Position Lp,Pp;
Lp->Next;
Pp->Next;
while(Lp!=NULL&&Pp!=NULL)
{
if(Pp->Element==Index++)
{
printf("%d",Lp->Element);
Pp=Pp->Next;
}
Lp=Lp->Next;
}
}
3.3
/*交换BeforeP后面的2个元素*/
void
Swap(List L,Position BeforeP)
{
Position P,AfterP;
P=BeforeP->Next;
AfterP=P->Next;
P->Next==AfterP->Next;
AfterP->Next=P;
BeforeP->Next=AfterP;
}
/*双链表,prev指向前节点*/
void
Swap2(List P,Position P)
{
Position AfterP,BeforeP;
BeforeP=P->Prev;
AfterP=P->Next;
P->Next=AfterP->Next;
P->Prev=AfterP;
BeforeP->Next=BeforeP;
AfterP->Next=P;
AfterP->Prev=BeforeP;
}
3.4
/*计算L1与L2的交集*/
List
Intersection(List L1,List L2)
{
List L;
Position P1,P2,P;
P1=L1->Next;
P2=L2->Next;
MakeEmpty(L);
P=L->Next;
while(L1!=NULL &&L2!=NULL)
{
if(P1->Element==P2->Element)
{
Insert(P1->Element, L, P)
}
else if(P1->Element<P2->Element)
{
P1=P1->Next;
}
else
{
pP2=P2->Next;
}
}
return L;
}