#include<stdio.h> #include<malloc.h> #define NULL 0 #define LEN sizeof(struct student)
struct student { int num; int score; struct student *next; }; int n; //-------------------------------------------------- struct student * creat()//返回头指针 { struct student *head; struct student *p1,*p2; n = 0; p1 = p2 = (struct student * )malloc(LEN); scanf("%d%d",&p1->num,&p1->score); head = NULL; while(p1->num != 0) { n=n+1; if(n==1) { head=p1;//当为第一个结点的时候,head作为头指针 p1作为输入的数
} else { p2->next = p1;//当有其他的输入的时候,作为p2下一个元素 p2 = p1; p1 = (struct student*)malloc(LEN); scanf("%d%d",&p1->num,&p1->score); } } p2->next = NULL;
return(head);//返回头指针 } //-------------------------------------------------- void print(struct student *head) { struct student *p; printf("/nNow,These %d records are:/n",n); p = head; if(head != NULL) do { printf("%d %d/n",p->num,p->score); p = p->next; }while(p != NULL); }
//------------------------------------------------
struct student * del(struct student *head,int num) { struct student *p1,*p2; if(head == NULL) { printf("/nlist null!/n"); goto end; } p1 = head; while(num != p1->num && p1->next != NULL)//没找到 { p2 = p1; p1 = p1->next;//p1后移一个 }
if(num == p1->num)//找到了 { if(p1 == head) head = p1->next; else p2->next = p1->next; printf("delect:%d/n",num); n= n-1; } else { printf("%d not been found!",num); } end: return (head); } //----------------------------------------------------- struct student * insert(struct student *head,struct student *stud) { struct student *p0; struct student *p1,*p2; p1 = head; p0 = stud; if(head == NULL) { head = p0; p0->next = NULL; } else { while((p0->num>p1->num) && (p1->next != NULL)) { p2 = p1; p1 = p1->next; } if(p0->num <= p1->num) { if(head == p1) head = p0; else p2->next = p0; p0->next = p1; } else { p1->next = p0; p0->next = NULL; } n = n+1; return (head); } } //----------------------------------------- void main() { struct student *head; struct student *stu; int del_num; printf("input records:/n"); head = creat(); print(head); printf("/ninput the deleted number:"); scanf("%d",&del_num); while(del_num != 0) { head = del(head,del_num); print(head); printf("input the deleted record:"); scanf("%d",&del_num); } printf("/ninput the inserted record:"); stu = (struct student *)malloc(LEN); scanf("%d%d",&stu->num,&stu->score); while(stu->num !=0) { head = insert(head,stu); print(head); printf("input the inserted record:"); stu = (struct student *)malloc(LEN); scanf("%d%d",&stu->num,&stu->score); } }