博客
关于我
[编程题]Linked List Sorting
阅读量:368 次
发布时间:2019-03-04

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

链表查找问题处理方案

问题背景

由于题目给定的输入范围较小,我们可以采用静态链表的方式来解决问题。为了确保链表处理的准确性,我们需要在节点结构体中增加一个标记位,用于记录当前节点是否为有效节点。

输入处理

读取输入后,我们需要注意其中可能包含不在链表中的节点。为了标记这些有效节点,我们需要对链表进行一次遍历,检查每个节点的有效性,并将其标记为有效节点。

节点排序规则

在对节点进行排序时,我们需要遵循以下规则:

  • 有效节点优先于无效节点排序。
  • 有效节点之间按照节点的数据值从小到大排序。
  • 节点标记逻辑

    通过对链表进行一次遍历,我们可以标记所有有效节点。具体实现步骤如下:

  • 初始化一个计数器cnt,用于记录有效节点的数量。
  • 从给定起始节点开始,遍历链表的每个节点。
  • 将遍历到的每个节点标记为有效节点,并增加计数器cnt
  • 排序逻辑

    使用自定义的比较函数对节点列表进行排序。比较函数的逻辑如下:

  • 如果两个节点的有效性不同,优先级高的节点排在前面。
  • 如果两个节点均为有效节点,则按数据值从小到大排序。
  • 代码实现

    #include 
    #include
    #include
    #include
    using namespace std;struct NODE { int ad = -1; int next = -1; int num; int flag = -1; // 标记是否为有效节点};bool cmp(const NODE& n1, const NODE& n2) { if (n1.flag != n2.flag) { return n1.flag > n2.flag; } else { return n1.num < n2.num; }}int main() { int ad, n; cin >> ad >> n; vector
    nodes(maxn); for (int i = 0; i < n; ++i) { int a1, a2; int num; cin >> a1 >> a2 >> num; nodes[a1].ad = a1; nodes[a1].num = num; nodes[a1].next = a2; } int p = ad; int cnt = 0; while (p != -1) { nodes[p].flag = 1; cnt++; p = nodes[p].next; } sort(nodes.begin(), nodes.end(), cmp); if (nodes[0].ad != -1) { printf("%d %05d\n", cnt, nodes[0].ad); } else { printf("%d %d\n", cnt, nodes[0].ad); } for (int i = 0; i < maxn; ++i) { if (i > 0) { cout << endl; } if (nodes[i].flag == 1) { cout << nodes[i].ad << " " << setw(5) << nodes[i].num; } }}

    输出格式说明

    • 有效节点数量以%d格式输出。
    • 有效节点的起始地址和数据值以%05d格式输出,以便于对齐。
    • 无效节点的起始地址和数据值直接以%d格式输出。

    通过以上实现,我们可以高效地解决链表查找问题,并确保输出格式符合要求。

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

    你可能感兴趣的文章
    OSG学习:WIN10系统下OSG+VS2017编译及运行
    查看>>
    OSG学习:人机交互——普通键盘事件:着火的飞机
    查看>>
    OSG学习:几何体的操作(一)——交互事件、简化几何体
    查看>>
    OSG学习:几何体的操作(二)——交互事件、Delaunay三角网绘制
    查看>>
    OSG学习:几何对象的绘制(一)——四边形
    查看>>
    OSG学习:几何对象的绘制(三)——几何元素的存储和几何体的绘制方法
    查看>>
    OSG学习:几何对象的绘制(二)——简易房屋
    查看>>
    OSG学习:几何对象的绘制(四)——几何体的更新回调:旋转的线
    查看>>
    OSG学习:场景图形管理(一)——视图与相机
    查看>>
    OSG学习:场景图形管理(三)——多视图相机渲染
    查看>>
    OSG学习:场景图形管理(二)——单窗口多相机渲染
    查看>>
    OSG学习:场景图形管理(四)——多视图多窗口渲染
    查看>>
    OSG学习:新建C++/CLI工程并读取模型(C++/CLI)——根据OSG官方示例代码初步理解其方法
    查看>>
    Sql 随机更新一条数据返回更新数据的ID编号
    查看>>
    OSG学习:空间变换节点和开关节点示例
    查看>>
    OSG学习:纹理映射(一)——多重纹理映射
    查看>>
    OSG学习:纹理映射(七)——聚光灯
    查看>>
    OSG学习:纹理映射(三)——立方图纹理映射
    查看>>
    OSG学习:纹理映射(二)——一维/二维/简单立方图纹理映射
    查看>>
    OSG学习:纹理映射(五)——计算纹理坐标
    查看>>