数据表记录包含表索引和数值,请对表索引相同的记录进行合并,即将相同索引的数值进行求和运算,输出按照key值升序进行输出。

输入描述:

先输入键值对的个数
然后输入成对的index和value值,以空格隔开

输出描述:

输出合并后的键值对(多行)

#include <iostream>
#include <stdio.h> using namespace std; struct table{
int id;
int value;
struct table *next;
}; typedef struct table *LinkList; void AddNode(LinkList *HeadList,int id,int value,int i)
{
LinkList p = *HeadList;
for(int j = ;j < i;j++)
p = p->next;
LinkList node = (LinkList)malloc(sizeof(struct table));
p->next = node;
node->id = id;
node->value = value;
node->next = NULL; }
void swap(LinkList *Node1,LinkList *Node2)
{
LinkList Node3 = (LinkList)malloc(sizeof(struct table));
LinkList node1 = *Node1;
LinkList node2 = *Node2; Node3->id = node1->id;
Node3->value = node1->value; node1->id = node2->id;
node1->value = node2->value; node2->id = Node3->id;
node2->value = Node3->value;
}
void Rank(LinkList *HeadList)
{
LinkList p = *HeadList;
p = p->next;
while(p != NULL){
LinkList p_p = *HeadList;
p_p = p_p->next;
while(p_p != NULL){
if(p->id < p_p->id)
swap(&p,&p_p);
p_p = p_p->next;
}
p = p->next;
}
}
void ListPrint(LinkList *HeadList){
LinkList p = *HeadList;
p = p->next;
while(p != NULL){
while(p->id == p->next->id){
if(p->next != NULL)
{
p->next->value += p->value;
p = p->next;
}
else
break;
}
printf("%d %d",p->id,p->value);
printf("\n");
p = p->next; }
}
int main()
{
int id,value;
LinkList list = (LinkList)malloc(sizeof(struct table));
int n;
list->id = ;
list->value = ;
while(scanf("%d",&n) != EOF){
for(int i = ;i < n;i++){
scanf("%d %d",&id,&value);
AddNode(&list,id,value,i);
}
Rank(&list);
ListPrint(&list);
}
free(list);
return ;
}

ACM-单向链表的操作的更多相关文章

  1. java对单向单向链表的操作

    概述:众所周知,数据对于数据的存储时连续的,也就是说在计算机的内存中是一个整体的.连续的.不间断的ADT数据结构.伴随的问题也会随之出现,这样其实对于内存的动态分配是不灵活的.而链表具备这个优点.因此 ...

  2. c语言之单向链表

    0x00 什么是链表 链表可以说是一种最为基础的数据结构了,而单向链表更是基础中的基础.链表是由一组元素以特定的顺序组合或链接在一起的,不同元素之间在逻辑上相邻,但是在物理上并不一定相邻.在维护一组数 ...

  3. ZT C语言链表操作(新增单向链表的逆序建立)

    这个不好懂,不如看 转贴:C语言链表基本操作http://www.cnblogs.com/jeanschen/p/3542668.html ZT 链表逆序http://www.cnblogs.com/ ...

  4. 复习下C 链表操作(单向链表)

    Object-C 作为C 的包装语言(运行时.消息机制).如果不熟悉C 的话实在玩得太肤浅. 随便深入oc 内部都会接触到C. runtime .GCD.Block.消息机制... 所有强大的功能无不 ...

  5. C++中如何对单向链表操作

    */ * Copyright (c) 2016,烟台大学计算机与控制工程学院 * All rights reserved. * 文件名:text.cpp * 作者:常轩 * 微信公众号:Worldhe ...

  6. Linus:利用二级指针删除单向链表

    Linus大神在slashdot上回答一些编程爱好者的提问,其中一个人问他什么样的代码是他所喜好的,大婶表述了自己一些观点之后,举了一个指针的例子,解释了什么才是core low-level codi ...

  7. 【转】Linus:利用二级指针删除单向链表

    原文作者:陈皓 原文链接:http://coolshell.cn/articles/8990.html 感谢网友full_of_bull投递此文(注:此文最初发表在这个这里,我对原文后半段修改了许多, ...

  8. C语言实现单向链表及其各种排序(含快排,选择,插入,冒泡)

    #include<stdio.h> #include<malloc.h> #define LEN sizeof(struct Student) struct Student / ...

  9. 输入一个单向链表,输出该链表中倒数第K个结点

    输入一个单向链表,输出该链表中倒数第K个结点,具体实现如下: #include <iostream> using namespace std; struct LinkNode { publ ...

  10. 单向链表JAVA代码

        //单向链表类 publicclassLinkList{       //结点类     publicclassNode{         publicObject data;         ...

随机推荐

  1. Linux:解压缩工具的管理与使用

    Linux的压缩格式有三种 1.TAR压缩格式 2.ZIP压缩格式 3.RAR压缩格式 TAR压缩包 TAR(Tape Archive,TAR)是 Linux 下的包管理工具,具有 5 种功能:打包. ...

  2. 关于rabbitmq

    关于rabbitmq 1 简单介绍rabbitmq RabbitMQ是实现了高级消息队列协议(AMQP)的开源消息代理软件(亦称面向消息的中间件).RabbitMQ服务器是用Erlang语言编写的,而 ...

  3. 201871010118-唐敬博《面向对象程序设计(java)》第一周学习总结

    博文正文开头格式:(3分) 项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/p/11435127.html 这个作业的要求在哪里 https:/ ...

  4. 201871010128-杨丽霞《面向对象程序设计(java)》第一周学习总结

    201871010128-杨丽霞<面向对象程序设计(java)>第一周学习总结 项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这 ...

  5. cairosvg使用过程中需要注意的问题

    在使用pygal的过程中,图片默认保存的是svg格式,如果需要生成本地的图片需要进行一些配置.下面是在摸索时的一些流程: 1.查看pygal的函数,dir(pygal.bar),发现其支持保存为png ...

  6. Mysql 免安装教程 百度云网盘有文件和word说明

    一 把文件解压到一个目录下 这是解压后的目录 将my.ini文件考进去 双击打开my.ini 找到这两行更改成自己的解压路径保存 右键此电脑属性 找到高级系统设置配置环境变量 新建—>变量值是解 ...

  7. Python连载42-异步协程函数

    一.  asyncio 1.python3.4开始引入标准库之中,内置对异步io的支持 2.asyncio本身是一个消息循环 3.步骤: (1)创建消息循环 (2)把协程导入 (3)关闭 4.举例: ...

  8. 使用Runtime自定义KVO,原理浅析

    一.介绍 什么是KVO?全称key-value-observer,键值观察,观察者设计模式的另一种实现.其作用是通过观察者监听属性值的变化而做出函数回调. 二.原理 KVO基于Runtime机制实现, ...

  9. 雅礼集训2019 D7T2 Subsequence

    雅礼集训2019 D7T2 Subsequence 直接贴题解: 平衡树代码: #include<bits/stdc++.h> #define ll long long #define N ...

  10. 避免python二维列表append一维列表时浅拷贝问题

    原始问题: 由于浅拷贝原因,使得当a列表变动时,b列表也发生变动 解决办法: 如上图所示,添加的时候添加新列即可,类似新建一个列表,使得与原有列表a不共用同一个内存