| 
 | 
 
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册  
 
x
 
#include <stdio.h> 
#include <malloc.h> 
#include <stdlib.h> 
#define LEN sizeof(struct student)  // student结构的大小 
struct student *creat();            //创建链表 
void print(struct student *head);   //打印链表 
struct student *shanchu(struct student *head,int num); 
struct student *charu(struct student *head); 
struct student 
{ 
 int num; 
 float score; 
 struct student *next; 
}; 
int n; //全局变量,用来记录存放了多少数据。 
void main() 
{ 
 int a=0; 
 struct student *stu; 
  
  
 stu = creat(); 
 print( stu ); 
 printf("Please enter the num to delete: "); 
 scanf("%d",&a); 
 print(shanchu(stu,a) ); 
 printf("\n\n"); 
 print(charu(stu)); 
 printf("\n\n"); 
 system("pause"); 
} 
struct student *creat() 
{ 
 struct student *head; 
 struct student *p1, *p2; 
  
 p1 = p2 = (struct student *)malloc(LEN);  // LEN是student结构的大小 
  
 printf("Please enter the num :"); 
 scanf("%d", &p1->num); 
 printf("Please enter the score :"); 
 scanf("%f", &p1->score); 
  
 head = NULL;      
 n = 0;     
  
 while( 0 != p1->num ) 
 { 
  n++; 
  if( 1 == n ) 
  { 
   head = p1;                  
  } 
  else 
  { 
   p2->next = p1; 
  } 
   
  p2 = p1; 
   
  p1 = (struct student *)malloc(LEN);     //又一次新建节点,并使p1指向它…… 
   
  printf("\nPlease enter the num :"); 
  scanf("%d", &p1->num); 
  printf("Please enter the score :"); 
  scanf("%f", &p1->score); 
 } 
  
 p2->next = NULL; 
  
 return head; 
} 
void print(struct student *head) 
{ 
 struct student *p; 
 printf("\nThere are %d records!\n\n", n); 
  
 p = head; 
 if( NULL != head ) 
 { 
  do 
  { 
   printf("学号为 %d 的成绩是: %f\n", p->num, p->score); 
   p = p->next; 
  }while( NULL != p ); 
 } 
} 
struct student *shanchu(struct student *head,int a) 
{ 
 struct student *p1, *p2; 
 if( NULL == head ) // 如果头结点指向NULL,这是一个空链表。纯属忽悠T_T 
 { 
   
  printf("\nThis list is null!\n"); 
  goto END; 
 } 
 p1=head; 
 if(head->num==a) 
 { 
  head=p1->next; 
  n--; 
  goto END; 
 } 
  
 while(p1->num!=a) 
 { 
  p2=p1; 
  p1=p1->next; 
  if(p1->num==a) 
  { 
   p2->next=p1->next; 
   n--; 
  } 
 } 
  
END: 
 return head; 
} 
 
struct student *charu(struct student *head) 
{ 
 struct student *p1,*p2; 
 struct student *p0;  
 do 
 { 
  p0 = (struct student *)malloc(LEN); 
  printf("please input the num to insertion: "); 
  scanf("%d",&p0->num); 
  printf("please input the score to insertion :"); 
  scanf("%f",&p0->score); 
   
   
   
  p1=head; 
  if(NULL==head) 
  { 
   head=p0; 
   p0->next=NULL; 
   goto END; 
  } 
   
  while(p0->num>p1->num&&p1->next!=NULL) 
  { 
   p2=p1; 
   p1=p1->next; 
  } 
  if(p0->num<=p1->num) 
  { 
   if(p1==head) 
   { 
    head=p0; 
    p0->next=p1; 
   } 
   else 
   { 
    p2->next=p0; 
    p0->next=p1; 
   } 
  } 
  else 
  { 
   p1->next=p0; 
   p0->next=NULL; 
  } 
 }while(p0->num!=0); 
  
END: 
  
  
 return head; 
} 
 |   
 
 
 
 |