题解 | #合并表记录#

合并表记录

https://www.nowcoder.com/practice/de044e89123f4a7482bd2b214a685201?tpId=37&tqId=21231&rp=1&ru=/exam/oj/ta&qru=/exam/oj/ta&sourceUrl=%2Fexam%2Foj%2Fta%3Fpage%3D1%26tpId%3D37%26type%3D37&difficulty=undefined&judgeStatus=undefined&tags=&title=

#include <stdio.h>
#include <stdlib.h>

struct hashTableManager{
    int size;
    struct hashTableNode* pHead;
};

struct hashTableNode{
    int index;
    int value;
    struct hashTableNode* pNext;
};

int main() {
    int number,index,value=0;
    int isIndexNew=1;
    struct hashTableManager manager = {0};
    struct hashTableNode *pcurrent_node;
    scanf("%d", &number);
    manager.size=0;
    manager.pHead = (struct hashTableNode*)malloc(sizeof(struct hashTableNode));

    pcurrent_node = manager.pHead;

    for(int i=0;i<number;i++){
        scanf("%d %d", &index, &value);
        /*检查index是否是新的*/
        struct hashTableNode *pTestNode = manager.pHead;
        for(int j=0;j<manager.size;j++){
            pTestNode = pTestNode->pNext;
            if(pTestNode->index == index){
                isIndexNew = 0;
                pTestNode->value+=value;
                break;
            }
        }

        if(isIndexNew){
            manager.size+=1;
            pcurrent_node->pNext = (struct hashTableNode*)malloc(sizeof(struct hashTableNode));
            pcurrent_node = pcurrent_node->pNext;

            pcurrent_node->index = index;
            pcurrent_node->value = value;
            
        } 
        isIndexNew = 1;
        
    }

    /*不按顺序循环输出哈希表*/
    // pcurrent_node = manager.pHead;
    // for(int i=0;i<manager.size;i++){
    //     pcurrent_node = pcurrent_node->pNext;
    //     printf("%d %d\n",pcurrent_node->index, pcurrent_node->value);
    // }

    /*加载index并排序*/
    int *pIndex=(int*)malloc(manager.size*sizeof(int));
    pcurrent_node = manager.pHead;
    /*加载*/
    for(int i=0;i<manager.size;i++){
        pcurrent_node = pcurrent_node->pNext;
        pIndex[i] = pcurrent_node->index;
    }

    
    /*排序*/
    int temp;
    for(int i=0,min=0;i<manager.size;i++){
        for(int j=i;j<manager.size;j++){
            if(pIndex[i]>pIndex[j]){
                temp=pIndex[i];
                pIndex[i] = pIndex[j];
                pIndex[j]=temp;
            }
        }
    }
    /*按从小到大输出*/
    
    /*加载*/
    for(int i=0;i<manager.size;i++){
        /*查找并输出*/
        pcurrent_node = manager.pHead;
        for(int j=0;i<manager.size;j++){
            pcurrent_node = pcurrent_node->pNext;
            if(pIndex[i] == pcurrent_node->index){
                printf("%d %d\n", pcurrent_node->index,pcurrent_node->value);
                break;
            }
        }
    }

    /*释放内存*/
    struct hashTableNode *pDeleteNode;
    pcurrent_node = manager.pHead;
    for(int i=0;i<manager.size;i++){
        pDeleteNode = pcurrent_node;
        pcurrent_node = pcurrent_node->pNext;
        free(pDeleteNode);
    }
    free(pIndex);
    return 0;
}

全部评论

相关推荐

整顿职场的柯基很威猛:这种不可怕,最可怕的是夹在一帮名校里的二本选手,人家才是最稳的。
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务