C/C++编程题之合并表记录

将之前一段时间在牛客上刷的题给大家分享一下。其中一道题是“合并表记录”,现在将通过的代码贴一下,供大家参考。

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

#include <stdlib.h>
#include <stdio.h>
struct node
{
    int key;
    int value; 
    struct node *prev;
    struct node *next;
};
//struct item
//{
//  struct node s_node;
//  struct item *prev;
//  struct item *next;
//};
void insertprev(struct node * s_item,struct node * insert_item)
{
    insert_item->prev = s_item->prev;
    s_item->prev->next = insert_item;
    insert_item->next = s_item;
    s_item->prev = insert_item;
};
int main()
{
    struct node list;
    int count;
    int key;
    int value;
    scanf("%d",&count);
    list.next=NULL;
    list.prev=NULL;
    list.key=0;
    list.value=0;
    if(count==1)
    {
        scanf("%d %d",&key,&value);
        printf("%d %d",key,value);
        return 0;
    }
    else
    {
        scanf("%d %d",&key,&value);
        list.next = (struct node *)malloc(sizeof(struct node));
        list.next->prev = &list;
        list.next->key = key;
        list.next->value = value;
        int i=1;
        for(i=1;i<count;i++)
        {
            struct node * s_item = list.next;
            scanf("%d %d",&key,&value);
            do
            {
                if(key<s_item->key)
                {
                    struct node * n_item = (struct node *)malloc(sizeof(struct node));
                    n_item->key = key;
                    n_item->value = value;
                    insertprev(s_item,n_item);
                    break;
                }
                else if(key==s_item->key)
                {
                    s_item->value+=value;
                    break;
                }
                else if(s_item->next==NULL)
                {
                    struct node * n_item = (struct node *)malloc(sizeof(struct node));                    
                    n_item->key = key;
                    n_item->value = value;
                    n_item->next=s_item->next;
                    n_item->prev=s_item;
                    s_item->next=n_item;
                    break;
                }
                else
                  s_item=s_item->next;                
            }while(1);
        }
    }
    struct node * l_item = list.next;
    while(l_item!=NULL)
    {
        printf("%d %d\n",l_item->key,l_item->value);
        l_item = l_item->next;
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/lzyzuixin/article/details/111387449