zoukankan      html  css  js  c++  java
  • 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("
    ");
            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;
    }
  • 相关阅读:
    JS设置CSS样式的几种方式
    jquery基础
    JS里面的两种运动函数
    JavaScript必须了解的知识点总结。
    JavaScript调用函数的方法
    纯CSS完成tab实现5种不同切换对应内容效果
    Web设计师值得收藏的10个jQuery特效
    jQuery的.bind()、.live()和.delegate()之间区别
    Web前端:11个让你代码整洁的原则
    js函数中参数的传递
  • 原文地址:https://www.cnblogs.com/qiang-wei/p/9321119.html
Copyright © 2011-2022 走看看