// // main.m // leap // // Created by Mamong on 12-11-26. // Copyright (c) 2012年 Mamong. All rights reserved. // #include<stdio.h> //#include<malloc.h> //#define NULL 0 #define LEN sizeof(DAT) typedef struct student { long num; char name[100]; int age; char sex; int score; struct student *next; }DAT; int static n=0; DAT* create() { DAT *head,*e; DAT *u,*R; head=(DAT *)malloc(LEN); e=(DAT *)malloc(LEN); R=head; printf("type in the first student's info:"); scanf("%ld %s %d %c %d",&e->num,e->name,&e->age,&e->sex,&e->score); if (0!=e->num) n=n+1; while(0!=e->num) { u=(DAT *)malloc(LEN); u->num=e->num;strcpy(u->name,e->name);u->age=e->age;u->sex=e->sex;u->score=e->score; R->next=u; R=u; if(getchar()=='\n') printf("type in the %d(st/nd/rd/th) student's info:",++n); scanf("%ld %s %d %c %d",&e->num,e->name,&e->age,&e->sex,&e->score); } R->next=NULL; return head; } void print(DAT *head) { DAT * p; if(NULL==head->next) printf("error:null\n"); else {p=head->next; do { printf("%ld,%s,%d,%c,%d\n",p->num,p->name,p->age,p->sex,p->score); p=p->next; }while(NULL!=p); } } DAT *del(DAT *head,long num) { DAT *p1,*p2; if(NULL==head->next) {printf("table is NULL\n");goto end;} p1=head; while(num!=p1->num&&NULL!=p1->next) { p2=p1; p1=p1->next; } if(num==p1->num) { if(head==p1) head=p1->next; else p2->next=p1->next; printf("the number to delete is %ld\n",num); n--; } else printf("error:no such student\n"); end: return(head); } DAT *insert(DAT *head,DAT *stud) { DAT *p0,*p1,*p2; p1=head->next; p0=stud; if(NULL==head->next) {head->next=p0;p0->next=NULL;} else { while((p0->num>p1->num)&&(NULL!=p1->next)) { p2=p1; p1=p1->next; } if(p0->num<=p1->num) { if(p1==head->next) head->next=p0; else p2->next=p0; p0->next=p1; } else {p1->next=p0;p0->next=NULL;} } n++; return(head); } void search(DAT *head,long num) { DAT *p1; long p0; p1=head->next; if(p1==NULL) { printf("error:table is NULL\n"); } while(p1!=NULL) { p0=p1->num; if(p0==num){ printf("number %ld student's info as follow:%ld,%s,%d,%c,%d",num,num,p1->name,p1->age,p1->sex,p1->score);break; } else p1=p1->next; } if(p1==NULL) printf("reach the tail,no such student"); } int main(int argc,char * argv[]) { long search_num; DAT *head,*stud; head=(DAT *)malloc(sizeof(DAT)); long num; head=create(); print(head); printf("type in the number to delete:"); scanf("%ld",&num); while(0!=num) { head=del(head,num); print(head); printf("type in the next number to delete:"); scanf("%ld",&num); } printf("new student info:"); stud=(DAT *)malloc(LEN); scanf("%ld %s %d %c %d",&stud->num,stud->name,&stud->age,&stud->sex,&stud->score); if(NULL!=stud) while(0!=stud->num) { head=insert(head,stud); print(head); printf("next new student's info:"); stud=(DAT *)malloc(LEN); scanf("%ld %s %d %c %d",&stud->num,stud->name,&stud->age,&stud->sex,&stud->score); } printf("type in the number you want to search:"); scanf("%ld",&search_num); search(head,search_num); return 1; }