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