博客
关于我
静态链表【初学者不太熟练动态链表时采取的一种替代手段】
阅读量:526 次
发布时间:2019-03-08

本文共 1392 字,大约阅读时间需要 4 分钟。

静态链表是一种通过数组结构来模拟链表的数据结构,特别适用于结点地址较小的场景。在本题中,我们需要寻找两条链表(两个单词)中的最大公共后缀的起始位置。

静态链表的定义与理解

静态链表通过数组实现,每个数组位置代表一个结点。结点包含数据域和指针域:

struct Node {    char data;    int next;}

其中,data 表示结点的字符,next 表示指向下一个结点的地址。因为结点地址较小,可以直接用数组索引无需频繁分配内存。

讨论问题

步骤分解

  • 读取输入:获取两个起始结点的地址及其总结点数。
  • 初始化静态链表:根据结点地址创建结构数组。
  • 构建每个链表:从起始结点开始,逐次处理每个结点,记录每个结点的字符和指向下一个结点的地址。
  • 寻找最大公共后缀:从两个链表的结结点开始向前遍历,找出字符一致的最长子串的起始位置。
  • 输出结果:若存在公共后缀,输出其起始地址;若无,输出-1。
  • 代码实现

    #include 
    #include
    #include
    const int maxn = 1000000; // 假设每个单词最多构造1e6个节点struct Node { char data; int next;} node[maxn];void build_link_list(char* first_address, char* second_address, int n, Node* node) { int curr = first_address; while (curr != -1) { node[curr].data = 0; // 初始化无效节点 if (curr == first_address || curr == second_address) { node[curr].data = (uintptr_t)(void*)curr; // 记录结点地址(可选) } // 其余节点不需要记录数据 if (curr != second_address) { node[curr].next = curr + 1; // 标准链表方式:next = 下一个地址 } else { node[curr].next = -1; } curr = node[curr].next; }}int main() { // 输出帮助信息 // 第三步的示例中有错误,请修正 return 0;}

    验证与测试

    在构建静态链表后,逐个结点遍历,确保每个节点的next指针正确连接。然后,从两个链表的结尾向前逐个字符比较,找到最长共同子串的开始位置。

    此外,需要注意以下几点:

  • 数组大小:根据题意的结点数量确定数组大小,需谨防溢出。
  • 特殊情况处理:包括-1(空节点)和同一位置多次指向的情况。
  • 数据类型:正确使用uintptr_tsize_t处理大型数组索引,以避免大小 endian 方向差异影响。
  • 通过以上步骤,可以高效地找到最大公共后缀的位置,解决问题。

    转载地址:http://ixsiz.baihongyu.com/

    你可能感兴趣的文章
    【2021.5.8 NOI模拟】贪心
    查看>>
    python3下安装jupyter kernel报错问题
    查看>>
    计算机网络参考模型,图文详解,更懂你!
    查看>>
    关于C++构造函数与析构函数的一些问题
    查看>>
    Empty parentheses interpreted as a function declaration
    查看>>
    mybatis 简单学习
    查看>>
    操作系统学科复习图
    查看>>
    P1226 【模板】快速幂||取余运算
    查看>>
    机器学习分类算法模型评价指标
    查看>>
    LeetCode197.打家劫舍
    查看>>
    pandas(10):数据增删改
    查看>>
    第7周编程作业
    查看>>
    Fire Game FZU - 2150
    查看>>
    Codeforces Round #426 (Div. 2) The Useless Toy
    查看>>
    A simple problem HDU-2522 【数学技巧】
    查看>>
    487-3279 POJ-1022【前导0~思维漏洞】
    查看>>
    D. Timofey and rectangles[四色定理]
    查看>>
    小Z的袜子(hose) HYSBZ - 2038 [莫队算法]
    查看>>
    Problem C. Dynamic Graph Matching [状态压缩DP]
    查看>>
    ZOJ Problem Set - 2675 Little Mammoth[圆与多边形交]
    查看>>