ACM-单向链表的操作

数据表记录包含表索引和数值,请对表索引相同的记录进行合并,即将相同索引的数值进行求和运算,输出按照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 = 0;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 = 0;
    list->value = 0;
    while(scanf("%d",&n) != EOF){
        for(int i = 0;i < n;i++){
            scanf("%d %d",&id,&value);
            AddNode(&list,id,value,i);
        }
        Rank(&list);
        ListPrint(&list);
    }
    free(list);
    return 0;
}
复制代码

 

posted @   强威  阅读(516)  评论(0编辑  收藏  举报
编辑推荐:
· .NET 原生驾驭 AI 新基建实战系列:向量数据库的应用与畅想
· 从问题排查到源码分析:ActiveMQ消费端频繁日志刷屏的秘密
· 一次Java后端服务间歇性响应慢的问题排查记录
· dotnet 源代码生成器分析器入门
· ASP.NET Core 模型验证消息的本地化新姿势
阅读排行:
· ThreeJs-16智慧城市项目(重磅以及未来发展ai)
· .NET 原生驾驭 AI 新基建实战系列(一):向量数据库的应用与畅想
· Ai满嘴顺口溜,想考研?浪费我几个小时
· Browser-use 详细介绍&使用文档
· 软件产品开发中常见的10个问题及处理方法
点击右上角即可分享
微信分享提示