您的位置:首页 > 理论基础 > 数据结构算法

数据结构与算法(c语言) 学习笔记——第三章练习

2016-03-10 17:41 1001 查看
时间复杂度

就是程序的大概运行步骤数,用程序中的一些变量表示

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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: