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

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

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 LpPp;
    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;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值