链表专练—整理音乐

 1 # include <stdio.h>
 2 # include <stdlib.h>
 3 typedef struct node
 4 {
 5  int data;
 6  char a[20];
 7  struct node *next;
 8 }LINK;//定义链表。
 9 LINK *creat(int n);//构造链表函数
10 LINK *sort(LINK *head);//对链表进行排序;
11 void print(LINK *head1);//链表的输出。
12 int main()
13 {
14  int n;
15  LINK *head,*head1;
16  scanf("%d",&n);
17  head=creat(n);
18  head1=sort(head);
19  print(head1);
20  printf("\n");
21  return 0;
22 }
23 LINK *creat(int n)
24 {
25  int i,m;
26  LINK *p,*head,*tail;//尾指针记录每次插入的位置。
27  head=(LINK *)malloc(sizeof(LINK));
28  head->next=NULL;
29  tail=head;
30  while(n--)
31  {
32   scanf("%d",&m);
33   for(i=1;i<=m;i++)
34   {
35    p=(LINK *)malloc(sizeof(LINK));
36    scanf("%s%d",p->a,&p->data);
37    p->next=NULL;
38    tail->next=p;
39    tail=p;
40   }
41  }
42  return head;
43 }
44 LINK *sort(LINK *head)
45 {
46  LINK *head1,*m,*p,*q;//head1记录排序后的头指针并且作为返回值。m始终是q的前一个节点,未删除做准备。
47  LINK *tail2,*tail1,*tail3;//tail1的用处为每次找到最大的之后插入到head1中。
48  //tail2,*tail3的作用为删除已经记录下的节点,为后来寻找第二大节点做准备。
49  int i,a,leag=1;//leag的作用为判断是否是把head链表的首部删除。
50  head1=(LINK *)malloc(sizeof(LINK));
51  head1->next=NULL;
52  tail1=head1;//初始化。
53  p=head->next;//确定p的值让q在head链表中变动开始找,若在中间部分找到,则删除tail2,*tail3
54  //记录的最大节点,之后再找第二大的。若p就是最大的则直接删除因此需要先把平,p,q的值用tail2,*tail3记录。
55  q=p;
56  m=head;
57  while(p!=NULL)
58  {
59   tail3=m;//记录值以防第一个p就是最大的。
60   tail2=p;//
61   a=p->data;
62   while(q!=NULL)
63   {
64    if(q->data>a)
65    {
66     tail2=q;//中间记录。
67     tail3=m;
68     a=q->data;
69     leag=0;//标记变量赋值
70    }
71    m=q;
72    q=q->next;
73   }
74   if(leag)
75    p=p->next;//if语句要在后边的语句之前。后移p,因为后边得删除p
76   tail3->next=tail2->next;//删除节点、
77   tail2->next=NULL;//tail2赋值NULL往head1上连接、
78   tail1->next=tail2;//连接
79   tail1=tail2;//尾节点后移。
80   q=p;//初始化。
81   m=p; 
82   leag=1;
83  }
84  return head1;
85 }
86 void print(LINK *head1)
87 {
88  int i;
89  LINK *p;
90  p=head1->next;
91  while(p!=NULL)
92  {
93   printf("%s ",p->a);
94   p=p->next;
95  }
96 }

 

posted on 2013-08-14 11:14  随风浪子的博客  阅读(101)  评论(0编辑  收藏  举报

导航