1 #include<stdio.h> 2 #include<stdlib.h> 3 #include<malloc.h> 4 5 #define LEN sizeof(struct student) 6 7 struct student{ 8 long num; 9 float score; 10 struct student *next; 11 }; 12 13 struct student *insert(struct student *head,struct student *stu){ 14 struct student *p0,*p1,*p2; 15 p0=stu; 16 if(head==NULL) 17 { 18 head=p0; 19 p0->next=NULL; 20 } 21 else 22 { 23 p1=head; 24 while(p1->num<p0->num&&p1->next!=NULL) 25 { 26 p2=p1; 27 p1=p1->next; 28 } 29 if(p1->num>p0->num) 30 { 31 if(p1==head) 32 head=p0; 33 else 34 p2->next=p0; 35 p0->next=p1; 36 } 37 else 38 { 39 p1->next=p0; 40 p0->next=NULL; 41 } 42 } 43 return head; 44 } 45 46 struct student *del(struct student *head,long num){ 47 struct student *p1,*p2; 48 if(head==NULL) 49 { 50 printf("The list is NULL.\n"); 51 return head; 52 } 53 p1=head; 54 while(p1->num!=num&&p1->next!=NULL)//当前结点不是要删除的结点而且后面还有结点。 55 { 56 p2=p1; 57 p1=p1->next; 58 } 59 if(p1->num==num) 60 { 61 if(p1==head) 62 head=p1->next; 63 else 64 p2->next=p1->next; 65 } 66 else 67 printf("%ld cannot be found.\n",num); 68 return head; 69 } 70 71 void print(struct student *head) 72 { 73 struct student *p; 74 if(head==NULL) 75 printf("The list is NULL.\n"); 76 else 77 { 78 printf("The data in the list:\n"); 79 for(p=head;p!=NULL;p=p->next) 80 { 81 printf("%ld,%f\n",p->num,p->score); 82 } 83 } 84 } 85 86 struct student *creat(void){ 87 struct student *head=NULL,*p1,*p2; 88 int n=0; 89 90 p1=(struct student *)malloc(LEN); 91 p2=p1; 92 scanf("%ld,%f",&p1->num,&p1->score); 93 while(p1->num!=0) 94 { 95 n++; 96 if(n==1) 97 head=p1; 98 else 99 p2->next=p1; 100 p2=p1; 101 p1=(struct student *)malloc(LEN); 102 scanf("%ld,%f",&p1->num,&p1->score); 103 } 104 p2->next=NULL; 105 return head; 106 } 107 108 int main(){ 109 setbuf(stdout,NULL); 110 struct student *head,*p; 111 long num; 112 printf("Input students' data:\n"); 113 head=creat(); 114 print(head); 115 printf("which one to delete:\n"); 116 scanf("%ld",&num); 117 while(num!=0) 118 { 119 head=del(head,num); 120 print(head); 121 printf("which one to delete:\n"); 122 scanf("%ld",&num); 123 } 124 printf("Insert one new student:\n"); 125 p=(struct student *)malloc(LEN); 126 scanf("%ld,%f",&p->num,&p->score); 127 while(p->num!=0) 128 { 129 head=insert(head,p); 130 print(head); 131 printf("Insert one new student:\n"); 132 p=(struct student *)malloc(LEN); 133 scanf("%ld,%f",&p->num,&p->score); 134 } 135 return 0; 136 }
相关文章: