博客
关于我
静态链表【初学者不太熟练动态链表时采取的一种替代手段】
阅读量: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/

    你可能感兴趣的文章
    覆盖关系
    查看>>
    策略模式
    查看>>
    c# datagirdview报dataerror请处理等等
    查看>>
    ubuntu20.04 编译vlc-android
    查看>>
    VLC/VLC-Android 编译系统说明
    查看>>
    Swagger2 设置全局token
    查看>>
    Spring Cloud Gateway 过滤器中直接返回错误结果信息
    查看>>
    Spring Boot整合OAuth2,附详细注释
    查看>>
    idea Error:java: 错误: 不支持发行版本 5
    查看>>
    java.io.IOException:Stream closed
    查看>>
    zookeeper入门
    查看>>
    CPLEX Python入门--从简单的CplexPythonAPI详解到简单的DoCplex建模
    查看>>
    未来趋势—云计算与边缘计算的协同发展
    查看>>
    JS-button标签说明
    查看>>
    JS17-DOM操作之设定标签属性
    查看>>
    JS18-DOM操作之标签的样式
    查看>>
    css-button标签说明
    查看>>
    JS-限定符号( ^ 和 $ 与 * + ? {n} {n,} {n,m} )
    查看>>
    jQuery----阻止(阻止冒泡事件、阻止默认事件的执行)
    查看>>
    demo---购物车的多条记录保存(cookie)
    查看>>