zoukankan      html  css  js  c++  java
  • 习题3.2

    #include<stdio.h>
    #include<stdlib.h>
    struct Node;
    typedef struct Node *ptrToNode ;
    typedef struct PtrToNode List;
    typedef struct PtrToNode Position;
    
    struct Node{
        ElementType Ele;
        PtrToNode Next;
    };
    
    void
    PrintLots(List L, List p)
    {
        int bef = 0;
        ElementType Tmp;
        Position ptr1,Ptr2;
        Ptr1 = p; Ptr2 = L;
        while( Ptr1->Next != NULL )
        {
            int i;
            Tmp = Ptr1->Next->Ele;
            for( i = 0; i < Tmp - bef; i++)
            {
                Ptr2 = Ptr2->Next;
            }
            printf("%d",Ptr2->Ele);
            Ptr1 = Ptr1->Next;
            bef = Tmp;
        }
    }
    View Code

    运行时间为O(m+n),,m,n分别为两个链表的元素个数,以上是个人算法,没有用到Next和first

    下面是标准答案(逻辑性强,信息量大

    void
    PrintLots( List L, List P )
    {
        Position Ppos,Lpos;
        Ppos = First(P); Lpos =First(L);
        int counter = 1;
        while( Ppos != NULL && Lpos != NULL )
        {
            if( Ppos->Ele == couter++)//counter的值和Lpos所指向位置的序数相等
            {
                Ppos = next( Ppos, P );
                printf("%?",Lpos->Ele);
            }
            Lpos = next( Lpos,L );
        }
    }
    View Code

    模型建造:上面一排P链表

         下面一排L链表

    Ppos和Lpos分别指向两链表的头结点

    除非指向L中相应的位置,否则绝不挪动Ppos指针

    有趣的是counter++后的值与指向L中结点的序号相同

  • 相关阅读:
    Haskell语言学习笔记(54)Data.Set
    Haskell语言学习笔记(53)Data.Sequence
    正则表达式(Java,C#,C++)
    Haskell语言学习笔记(52)正则表达式
    Haskell语言学习笔记(51)Comonad
    最大获利
    最小生成树
    PIGS
    三维偏序
    <noip2017>列队
  • 原文地址:https://www.cnblogs.com/gabygoole/p/4621549.html
Copyright © 2011-2022 走看看