基础实验3-2.3 共享后缀的链表 (25分)

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

函数接口定义:

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

/* 你的代码将被嵌在这里 */

输入样例:

如图存储的链表

输出样例:

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

原文地址:https://www.cnblogs.com/8023spz/p/12302737.html

时间: 2024-07-30 16:21:11

基础实验3-2.3 共享后缀的链表 (25分)的相关文章

基础实验4-2.3 二叉树的非递归遍历 (25分)

本题要求用非递归的方法实现对给定二叉树的 3 种遍历. 函数接口定义: void InorderTraversal( BinTree BT ); void PreorderTraversal( BinTree BT ); void PostorderTraversal( BinTree BT ); 其中BinTree结构定义如下: typedef struct TNode *Position; typedef Position BinTree; struct TNode{ ElementType

PTA数据结构链表共享后缀的链表

需要考虑:有无交集:有多个字符相同,但只有最后两个是公共的:有一个单词为空:全相等: 汇总网上代码,解析如下: 首先求出len1和len2,若len1>len2,令p1指向链表中的第len1-len2+1个结点,若len2>len1,令p2指向链表中的第len2-len1+1个结点 ,然后将指针P1和p2同步向后移动,直到P1和p2指向同一结点,再比较接下来的几个节点 PtrToNode Suffix( List L1, List L2 ) { List P1,P2; P1=L1->Ne

PAT基础级-钻石段位样卷2-7-7 危险品装箱 (25 分)

集装箱运输货物时,我们必须特别小心,不能把不相容的货物装在一只箱子里.比如氧化剂绝对不能跟易燃液体同箱,否则很容易造成爆炸. 本题给定一张不相容物品的清单,需要你检查每一张集装箱货品清单,判断它们是否能装在同一只箱子里. 输入格式: 输入第一行给出两个正整数:N (≤) 是成对的不相容物品的对数:M (≤) 是集装箱货品清单的单数. 随后数据分两大块给出.第一块有 N 行,每行给出一对不相容的物品.第二块有 M 行,每行给出一箱货物的清单,格式如下: K G[1] G[2] ... G[K] 其

基础实验1(单臂路由及利用路由器开启DHCP自动分配IP地址)

实验环境:PT 6.2 两台PC:PC1/PC2  一台cisco 2960交换机 一台2620路由器 实验目的:让PC1/PC2属于不同的VLAN,且相互通信.同时自动获取各自网段IP地址. 1.进入2960的配置模式,划分不同的vlan并将PC1/PC2划入不同的网段.并将连通路由器端口转为干道协议. 代码如下: >en #conf t config)#vlan 10 config)#vlan 20 config)#int f0/21 config)#switchport ac vlan 1

nodejs学习笔记_nodejs和PHP在基础架构上的差别--共享状态的并发

绝大多数对于Node.js的讨论都把关注点放在了处理高并发能力上,做开发的时候一定要明确node内部做出的权衡,以及node应用性能好的原因. node 为javascript引入了一个复杂的概念,:共享状态的并发. node採用一个长期执行的进程 而php在apache中会产生多个进程 例如以下图所看到的: 代码验证: PHP: <?php $i = 0; $i++; echo $i nodejs: var http = require('http'); var i=0; http.creat

[nRF51822] 10、基础实验代码解析大全 &#183; 实验15 - RTC

一.实验内容: 配置NRF51822 的RTC0 的TICK 频率为8Hz,COMPARE0 匹配事件触发周期为3 秒,并使能了TICK 和COMPARE0 中断. TICK 中断中驱动指示灯D1 翻转状态, 即指示灯D1 以8Hz 的速率翻转状态 COMPARE0 中断中点亮指示灯D2 二.nRF51822的内部RTC结构: NRF51822 有两个RTC 时钟:RTC0,RTC1.两个RTC 均为24 位,使用LFCLK 低频时钟,并带有12 位分频器,可产生TICK.compare 和溢出

[ZigBee] 4、ZigBee基础实验——中断

前言 上一篇介绍了CC2530的IO的基础知识,并用LED的控制来展示如何配置并控制GPIO的输出,用KEY状态的读取实验来展示如何读取GPIO的状态.从上一节的KEY状态读取的代码看出是采用轮训方式的,这种方式是很浪费资源,本节将介绍一种中断方式来替换轮训的方案. 一.中断 电路依然没变,若要使用CC2530的外部中断需要使用P0IEN.PICTL.P0IFG.INE1寄存器. 按键中断初始设置为: 1 /********************************************

WLGK-51单片机接口技术基础实验 ——LED闪烁灯

WLGK-51单片机接口技术基础实验-LED闪烁灯 当我们开始接触单片机,首先接触的第一个实验就是LED灯的使用,类似于我们学习软件开始接触的第一个程序"HelloWorld",这个实验是带领我们走入"软硬件综合使用"的一个很好入门示例,51单片机是他的一个载体.下面小伙伴们,让我们一起来揭开LED的神秘面纱吧! 万立高科官网:www.wanligaoke.com 万立高科官方商城:http://www.wlgkbj.com 万立高科淘宝直销店铺:https://r

[ZigBee] 6、ZigBee基础实验——定时器3和定时器4(8 位定时器)

上一节讲了16位定时器1,本节讲8位定时器3和定时器4! 1.综述 Timer 3 and Timer 4 are two 8-bit timers(8位定时器). Each timer has two independent capture/compare channels(独立的捕获/比较通道),each using one I/O pin per channel. Features: · Two capture/compare channels· Set, clear or toggle