zoukankan      html  css  js  c++  java
  • 基础实验3-2.3 共享后缀的链表 (25分)

    有一种存储英文单词的方法,是把单词的所有字母串在一个单链表上。为了节省一点空间,如果有两个单词有同样的后缀,就让它们共享这个后缀。下图给出了单词“loading”和“being”的存储形式。本题要求你找出两个链表的公共后缀。

    fig.jpg

    函数接口定义:

    PtrToNode Suffix( List L1, List L2 );
    
     

    其中List结构定义如下:

    typedef struct Node *PtrToNode;
    struct Node {
        ElementType Data; /* 存储结点数据 */
        PtrToNode   Next; /* 指向下一个结点的指针 */
    };
    typedef PtrToNode List; /* 定义单链表类型 */
    
     

    L1L2都是给定的带头结点的单链表。函数Suffix应返回L1L2的公共后缀的起点位置。

    裁判测试程序样例:

    #include <stdio.h>
    #include <stdlib.h>
    
    typedef char ElementType;
    
    typedef struct Node *PtrToNode;
    struct Node {
        ElementType Data; /* 存储结点数据 */
        PtrToNode   Next; /* 指向下一个结点的指针 */
    };
    typedef PtrToNode List; /* 定义单链表类型 */
    
    void ReadInput( List L1, List L2 ); /* 裁判实现,细节不表 */
    void PrintSublist( PtrToNode StartP ); /* 裁判实现,细节不表 */
    PtrToNode Suffix( List L1, List L2 );
    
    int main()
    {
        List L1, L2;
        PtrToNode P;
    
        L1 = (List)malloc(sizeof(struct Node));
        L2 = (List)malloc(sizeof(struct Node));
        L1->Next = L2->Next = NULL;
        ReadInput( L1, L2 );
        P = Suffix( L1, L2 );
        PrintSublist( P );
    
        return 0;
    }
    
    /* 你的代码将被嵌在这里 */
    
     

    输入样例:

    如图存储的链表
    
     

    fig.jpg

    输出样例:

    ing

    代码:
    PtrToNode Suffix( List L1, List L2 ) {
        int num1 = 0,num2 = 0;
        List t = L1 -> Next,a = L1 -> Next,b = L2 -> Next;
        while(t) {
            num1 ++;
            t = t -> Next;
        }
        t = L2 -> Next;
        while(t) {
            num2 ++;
            t = t -> Next;
        }
        while(num1 > num2) {
            num1 --;
            a = a -> Next;
        }
        while(num2 > num1) {
            num2 --;
            b = b -> Next;
        }
        while(a) {
            if(a == b) return a;
            a = a -> Next;
            b = b -> Next;
        }
        return NULL;
    }
  • 相关阅读:
    Hibernate批量处理数据、HQL连接查询
    Hibernate二级缓存配置
    Hibernate一对一关联映射配置
    Hibernate延迟加载
    Hibernate双向多对多关联
    映射对象标识符
    06章 映射一对多双向关联关系、以及cascade、inverse属性
    解析ThreadLocal
    save()、saveOrUpdate()、merge()的区别
    第一个Shell脚本
  • 原文地址:https://www.cnblogs.com/8023spz/p/12302737.html
Copyright © 2011-2022 走看看