PAT Basic Level 1075 链表元素分类(静态链表)

2023-11-17

题目链接:点击查看

题目描述:

给定一个单链表,请编写程序将链表元素进行分类排列,使得所有负值元素都排在非负值元素的前面,而 [0, K] 区间内的元素都排在大于 K 的元素前面。但每一类内部元素的顺序是不能改变的。例如:给定链表为 18→7→-4→0→5→-6→10→11→-2,K 为 10,则输出应该为 -4→-6→-2→7→0→5→10→18→11。

输入输出格式:

每个输入包含一个测试用例。每个测试用例第 1 行给出:第 1 个结点的地址;结点总个数,即正整数N (≤10​5​​);以及正整数K (≤10​3​​)。结点的地址是 5 位非负整数,NULL 地址用 −1 表示。接下来有 N 行,每行格式为:Address Data Next 其中 Address 是结点地址;Data 是该结点保存的数据,为 [−10​5​​,10​5​​] 区间内的整数;Next 是下一结点的地址。题目保证给出的链表不为空。

对每个测试用例,按链表从头到尾的顺序输出重排后的结果链表,其上每个结点占一行,格式与输入相同。

输入输出样例:

输入

00100 9 10
23333 10 27777
00000 0 99999
00100 18 12309
68237 -6 23333
33218 -4 00000
48652 -2 -1
99999 5 68237
27777 11 48652
12309 7 33218

输出

33218 -4 68237
68237 -6 48652
48652 -2 12309
12309 7 00000
00000 0 99999
99999 5 23333
23333 10 00100
00100 18 27777
27777 11 -1

题目分析:
本题可以构造一个静态链表(即链表的数组的表示法),对于每一个结构数组node[index] 其index表示当前节点地址,node[index].cur表示当前节点后继节点的地址。输入完成后对此静态链表进行遍历分类,在此之前创建一个大小为3动态数组pos 用于储存节点地址,如若data<0 则将此节点地址插入pos[0]中,同理若k>=data>=0 或data>k 将其地址分别插入pos[1] ,pos[2]中。最后,要特别注意输出技巧。

代码:
 

#include<iostream>
#include<cstdio>
#include<vector>
#include<cstring>
#include<string>
using namespace std;
struct staticListNode
{
    int data;
	int cur;//游标 用于存储当前节点的后继节点位置	
}; 
int main()
{
     struct staticListNode node[100005];
	 int n,k,index,f_index;
	 vector<int>pos[3];//分类记录节点位置 
	 scanf("%d%d%d",&f_index,&n,&k);
	 while(n--)
	 {
	    scanf("%d",&index);
		scanf("%d",&node[index].data);
		scanf("%d",&node[index].cur);	
	 }
	 index=f_index;
	 while(index!=-1)
	 {
	     if(node[index].data<0)
		 {
		     pos[0].push_back(index);	
		 }	
		 else if(node[index].data>=0&&node[index].data<=k)
 		 {
		 	 pos[1].push_back(index);
		 }
		 else 
		 {
		 	 pos[2].push_back(index);
		 }
		 index=node[index].cur;
     }	
    int flag=0;
    for(int i=0;i<3;i++)
    {
    	for(int j=0;j<pos[i].size();j++)
    	{
    		if(flag==0)
    		{
			  printf("%05d %d ",pos[i][j],node[pos[i][j]].data);
			  flag=1;
		    }
		    else
		    {
		    	printf("%05d\n%05d %d ",pos[i][j],pos[i][j],node[pos[i][j]].data);
			}
		}
	}
	printf("-1");
	return 0;
} 

 

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PAT Basic Level 1075 链表元素分类(静态链表) 的相关文章

  • 14-数据结构-有序链表排序

    问题 给你一个链表 然后去进行排序 并输出 思路 排序时 类似于冒泡排序 这里则定义两个链表指针 一个指向第一位 一个指向第一位的后一位 由于需要排序的是数据 因此定义一个中间变量 int temp 用于后面的数据域比较排序 两层循环 外循
  • 数据结构之链表与线性表

    数据结构之链表与线性表 线性表 顺序线性表 顺序表 顺序线性表 使用数组实现 一组地址连续的存储单元 数组大小有两种方式指定 一是静态分配 二是动态扩展 优点 随机访问特性 查找O 1 时间 存储密度高 逻辑上相邻的元素 物理上也相邻 缺点
  • 一文弄懂循环链表、双向链表、静态链表

    循环链表 双向链表 静态链表 三遍定律 理解了单链表本文的理解易如反掌 单链表请点击这里 理解了单链表本文的理解易如反掌 单链表请点击这里 理解了单链表本文的理解易如反掌 单链表请点击这里 1 循环链表 将单链表中终端结点的指针端由空指针改
  • 【mysql】-【innodb数据存储结构】

    文章目录 数据库的存储结构 页 磁盘与内存交互基本单位 页 页结构概述 页的大小 页的上层结构 页的内部结构 File Header 文件头部 和File Trailer 文件尾部 File Header 文件头部 38字节 File Tr
  • 005. 反转链表-双指针

    题目链接 力扣 代码 01 双指针 class Solution public ListNode reverseList ListNode head ListNode temp 保存cur的下一个节点 ListNode cur head L
  • 链表和线性表的优缺点

    链表和线性表的优缺点 作为我们最先接触的两个数据结构 链表和线性表的优缺点都较为明显 并且二者互相补足 文章目录 链表和线性表的优缺点 线性表 线性表的组成 线性表的缺点 线性表的优点 链表 链表的组成 链表的优点 链表的缺点 总结 线性表
  • 【数据结构】堆、栈的区别

    heap 是堆 stack 是栈 在编程语言中 内存分配方式主要包括 栈 堆 静态存储分配 栈的内存是由操作系统自动分配 释放的 存放函数的参数值 局部变量等 堆的内存是由程序员手动申请和释放的 对应C语言中的malloc函数和C 中的ne
  • C++中的.和->

    C 中的 和 gt 1 C 中的点 的应用 如果是一个对象或者引用去调用成员变量或者成员函数函数的话 会使用到点 include
  • 使用c++超详细解释数据结构中的顺序栈和链栈

    在C 中 栈 Stack 是一种数据结构 它可以用来存储数据 并支持两种基本操作 压入 Push 和弹出 Pop 栈的特点是后进先出 Last In First Out LIFO 也就是最后压入的元素最先弹出 栈可以用数组或链表等数据结构来
  • 剑指Offer - 面试题25:合并俩个排序的链表

    题目 输入俩个递增排序的链表 合并这俩个链表并使新链表中的节点仍然是递增序列 例如下图链表1和链表2 合并后的升序链表为链表3 链表节点定义如下 typedef int TElemType 链表节点值的数据类型 struct ListNod
  • 数据结构之数组

    目录 前言 线性表与连续内存 数组是如何支持随机访问 数组的插入与删除 数组越界 总结 参考文章 前言 数组是我们平时开发中经常遇到的一种数据结构 提起数组 我们能想到最大的特点就是 要提前定义好 需要提前申请好内存空间 数组是一种线性表数
  • 2-数据结构-线性表之顺序表的动态分配

    说明 由于原来顺序表的静态分配 浪费空间 且存在溢出现象 因此采取动态分配的方式 创建顺序表中的数组 跟C语言正常动态分配一样 需要直到扩充的大小 和数组指针即可 代码如下 看着多 其实原理差不多 主要知道哪些操作即可 无需了解具体代码 i
  • 【数据结构】单向链表的修改和删除

    单向链表的修改和删除 从单链表中删除一个节点思路 1 找到需要删除节点的前一个节点temp 2 temp next temp next next 3 被删除的节点 将不会有其他引用指向 会被垃圾处理机制回收 1 单向链表的修改操作 1 1
  • 关于uthash 的初步源码阅读

    背景 在偶然的mqtt mosquitto 中的源码中查看的关于topic的处理 知道了哈希表这种的数据结构 最近花了一点时间将这个部分的源码看了一部分 不知道后面还有没有时间继续查看所以就写一篇文档作为笔记吧 uthash 使用 utha
  • 【C++】STL中list容器内部元素的移动和交换

    文章目录 前言 一 list是什么 二 元素移动 1 插入 删除 2 切除 拼接 三 元素交换 1 元素值交换 2 元素 节点 交换 总结 前言 提示 list insert list erase list splice std iter
  • 链表【1】

    文章目录 2 两数相加 1 题目 2 算法原理 3 代码实现 445 两数相加 II
  • 算法题-简单系列-03-判断链表中是否有环

    文章目录 1 题目 1 1 思路1 双指针 1 2 思路2 哈希表 1 题目 判断给定的链表中是否有环 如果有环则返回true 否则返回false 1 1 思路1 双指针 我们使用两个指针 fast 与 slow 它们起始都位于链表的头部
  • 【数据结构/C++】树和二叉树_二叉链表

    include
  • 剑指 Offer(第2版)面试题 35:复杂链表的复制

    剑指 Offer 第2版 面试题 35 复杂链表的复制 剑指 Offer 第2版 面试题 35 复杂链表的复制 解法1 模拟 剑指 Offer 第2版 面试题 35 复杂链表的复制 题目来源 48 复杂链表的复刻 解法1 模拟 算法 复制原
  • 华为OD机试 Python 【最大载货量】

    描述 在火车站旁的货运站 小明负责调度2K辆中转车 其中K辆用于干货 K辆用于湿货 每批到站的货物来自不同的供货商 需要按照顺序装入中转车 注意 一个供货商的货物只能装在一辆车上 不能分开 但是 一辆车可以放多个供货商的货物 问题是 要让所

随机推荐

  • 干了六年Android开发现在裸辞失业了,再过2个月就30了,该怎么继续生活?

    这是我在某论坛看到别人分享的故事 觉得可以展开聊一下 对于我们这些中年程序员 可以裸辞吗 前言 首先介绍一下主人公的情况 目前所在的是一家小的创业公司 待了3年多 薪资一般吧 之前在一家中型上市企业也干了三年 因为想涨薪所以跳到现在这家小公
  • 【数据结构】KMP算法

    算法简介 传统暴力算法和KMP算法 设定主串的长度为n 字串的的长度为m 传统的暴力字符串匹配算法理论上最多需要花费O nm 的时间复杂度才能完成串的匹配操作 但是在实际使用中 往往也能够以接近O m n 的时间复杂的完成匹配操作 因此现在
  • 【js】JSON.stringify 语法实例讲解

    语法 JSON stringify value replacer space value 是必选字段 就是你输入的对象 比如数组 类等 replacer 这个是可选的 它又分为2种方式 一种是数组 第二种是方法 情况一 replacer为数
  • Tcp建立连接为什么需要三次握手

    前言 众所周知tcp传输层协议在建立连接的时候需要三次才能建立起一个真正的可靠连接 可是为什么是三次呢 不可以是两次 四次等等呢 可以自己思考一番 带着疑问可以看下文 三次握手 在 计算机网络 一书中其中有提到 三次握手的目的是 为了防止已
  • 逐步视频讲解--用Tensorflow进行中文自然语言处理--情感分析

    本教程为原创 转载请注明教学视频地址 视频教程链接 https www bilibili com video av30543613 书面教程和代码链接 https github com aespresso chinese sentiment
  • 王者荣耀8月15日服务器维护,王者荣耀8月15日更新维护到什么时候 王者荣耀8月15日更新时间分享...

    王者荣耀 5V5英雄公平对战手游 腾讯最新MOBA大作 5V5 3v3 1v1 多样模式一键体验 海量英雄随心选择 10秒实时跨区匹配 与好友组队 类型 动作冒险 大小 792 06M 语言 简体中文 在王者荣耀8月15日更新到什么时候呢
  • BAT54C 二极管是如何工作的?

    这是一个多电源供电的电路 Vcc是正常供电电源 如5V 由市电变换得到 电压大于 Vcc1 Vf 正常供电时二极管不导通 Vcc1是电池供电电源 当Vcc撤掉时 DD1 上边的二极管 导通 由Vcc1供电 当电池Vcc1耗尽或更换电池时 V
  • openwrt上opkg更新报错"opkg_download: Failed to download ............."

    开始搞op的时候 看到op竟然可以直接安装一些插件 激动坏了 因为这东西对嵌入式的小系统来说简直不敢想 但是op就支持了 就是这么任性 好不容易编译了固件 按照网上的教程 telnet进去 首先opkg update 结果没有想象中的华丽更
  • 聚类算法(二)--层次聚类法

    本文主要介绍层次聚类法的基本原理 距离计算方法 算法的优缺点 以及R语言实战 一 概述 层次聚类 Hierarchical Clustering 试图在不同层次上对数据集进行划分 从而形成树形的聚类结构 数据集的划分可采用 自底向上 的聚合
  • CUDA编程学习0——环境搭建&环境详解

    目录 环境配置 软件安装 1 支持最高的cuda版本查询 下载cuda开发软件 3 配置环境 bashrc添加环境变量 4 后续维护查询 补 关于windows下的cuda环境配置 一 Visual Studio 2022 CUDA 11
  • java,html5+css3以及javascript面试题------自己面试的时候遇到的面试题,所以整理一下

    1 java部分 1 线程与进程的区别 一个程序至少有一个进程 一个进程至少有一个线程 线程的划分尺度小于进程 使得多线程程序的并发性高 另外 进程在执行过程中拥有独立的内存单元 而多个线程共享内存 从而极大地提高了程序的运行效率 线程在执
  • matlab 计算结果为nan,matlab 计算 结果总是为Nan

    本人刚刚接触matlab 对这些运算不是很懂 计算ni的位置 exp E g 2 k T eps 这个值之前一直是0 加了eps后就有结果显示了 后面部分exp alfa T 2 k T beita 一直为无穷大然后结果就为Nan 不知道怎
  • UIKeyboard键盘相关知识点-IOS开发

    一 键盘风格 UIKit框架支持8种风格键盘 java view plain copy print typedef enum UIKeyboardTypeDefault 默认键盘 支持所有字符 UIKeyboardTypeASCIICapa
  • 08.animation-----05.旋转

    1 旋转是将元素沿着x y z轴以指定的角度旋转 旋转方向为顺时针 单位可以为deg也可为turn 2 旋转也是使用transform标签 使用以下函数 rotatex 使元素沿着x轴旋转 rotatey 使元素沿着y轴旋转 rotatez
  • 微信小程序-天气预报案例之和风天气API-云开发版

    小程序 天气预报 在现实生活中是非常常用的 我们平时都可以通过自己的手机上面或网上进行查看天气等等 鉴于有些小伙伴对云开发不熟悉 学习请移步到我的另外一篇文章 天气预报之和风天气 简易版 这个demo可以应用到自己的小程序模块上 前期准备
  • 面试华为软件测试岗,收到offer后我却毫不犹豫拒绝了....

    我大学学的是计算机专业 毕业的时候 对于找工作比较迷茫 也不知道当时怎么想的 一头就扎进了一家外包公司 一干就是2年 我想说的是 但凡有点机会 千万别去外包 在深思熟虑过后 决定要提升自己 也发现自己身边的人都是在大厂上班 也听他们说了大厂
  • 第十章 os.path模块

    1 os path模块介绍 os 模块是Python 内置的与操作系统功能和文件系统相关的模块 该模块的子模块os path 是专门用于进行路径操作的模块 常用的路径操作主要有判断目录是否存在 创建目录 删除目录和遍历目录等 说明 在使用o
  • 腾讯视频url获取方法

    总公式 url fn vkey 第一步 复制视频地址 步骤如下 点击复制通用页面地址 第二布 http vv video qq com getinfo vid m00253deqqo platform 101001 charge 0 oty
  • [激光原理与应用-34]:《光电检测技术-1》- 光学测量基础 - 光电检测、光学测量、作用、应用、发展趋势

    目录 第1章 光学测量概述 1 1 什么是光学检测 1 2 光学检测的重要作用 1 3 计量 1 4 测量 1 5 光学测量的特点与优点 第2章 光的测量范围与相应技术手段 2 1 光的辐射度量与光度量的测量 2 2 非光物理量的光学测量
  • PAT Basic Level 1075 链表元素分类(静态链表)

    题目链接 点击查看 题目描述 给定一个单链表 请编写程序将链表元素进行分类排列 使得所有负值元素都排在非负值元素的前面 而 0 K 区间内的元素都排在大于 K 的元素前面 但每一类内部元素的顺序是不能改变的 例如 给定链表为 18 7 4