#include<stdio.h>//本题使用链表的冒泡排序(自己懵的),可能有冗杂的地方,欢迎大家观摩哦 #include<stdlib.h> typedef struct num { char s[100]; int num; struct num *next; }link; link* create(int n) { link* head,*node,*now; head =(link*) malloc(sizeof(link)); now =head; for(int i=1;i<=n;i++) { node =(link*)malloc(sizeof(link)); scanf("%s",&node->s); scanf("%d",&node->num); now->next =node; now=node; } return head; } void paixu(int n,link* head)//排序 { link* r,*node,*l; for(int i=0;i<n;i++) { node =head; l=node->next; r=node->next->next; for(int j =0;j<n-i-1;j++) { if(l->num>r->num)//换时l左边相当于没动,右边r挪了两位,或者说在l上又移了一位 { node->next=r; l->next=r->next; r->next=l; r=l->next; node=node->next; } else//不换时正常链表遍历 { node =node->next; l=l->next; r=r->next; } } } } void show(int n,link*head) { link*node =head->next; while(node!=NULL) { printf("%s\n",node->s); node =node->next; } } int main() { int n; scanf("%d",&n); link*a =create(n); paixu(n,a); show(n,a); return 0; }