使用单链表方式,将所有成员升序方式挂入链表,在没录入一个成员与链表内现有成员比较,值小于当前结点,插入到结点前,当等于当前结点,值累加,当遍历到节点到最后还没有成功,则放入到链表尾。 从表头依次打印,即可得到升序结果。

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

typedef struct node { int index; int val; struct node *next; } Nlist;

//定义链表头 static Nlist pHead;

void Insert_Link(int index,int val) { Nlist *p = &pHead; Nlist *Ndata; //1.判定头节点为空 while(p->next != NULL) { if((p->next)->index == index) { (p->next)->val +=val; return ; }

    //第一个小于 值 出入到当前节点前
    if(((p->next)->index) > index)
    {
        Ndata = (Nlist *)malloc(sizeof(Nlist));
        Ndata ->index = index;
        Ndata ->val = val;
        Ndata ->next = p->next;
        p->next = Ndata;
        return ;
    }
    
    	p=p->next;
}

//最后一个节点
if(p->next == NULL)
{
    Ndata = (Nlist *)malloc(sizeof(Nlist));
    Ndata ->index = index;
    Ndata ->val = val;
    Ndata ->next = NULL;

    p->next = Ndata;
    return;
}

}

int main(void) { int count=0; int Index,Val;

//初始化链表头
pHead.next = NULL; 

Nlist *p=&pHead;

while(scanf("%d",&count) != EOF)
{
    for(int i=0;i<count;i++)
    {
      scanf("%d %d",&Index,&Val);
      Insert_Link(Index,Val);
    }
   
    while(p->next)
    {
        printf("%d %d\n",(p->next)->index,p->next->val);
        p=p->next;
    }
}

}