|
发表于 2014-4-5 19:49:12
|
显示全部楼层
给你一个参考吧 这个是我去年暑假写的(当时刚刚学大牛勿喷啊)- #include<stdio.h>
- #include<malloc.h>
- #include<string.h>
- #define LEN sizeof(struct student)
- struct student *create();//创建链表
- struct student *del(struct student *head,int num);//删除链表中数字 (链表头指针,要删除的学号)
- struct student *insert(struct student *head,struct student *head_2);//网链表中加元素(链表头指针,要加的那个的)
- void print(struct student *head);//输出链表
- struct student *clear(struct student *head);//清空链表
- void change(struct student *head,int num,float score);//更改链表数据
- struct student
- {
- long int num;
- float score;
- struct student *next;
- };
- int n;
- char ch;
- int main()
- {
- struct student *head,head_2;
- int num,i;
- float score;
- printf("请先建立一个链表!(要结束请在number处输入0)\n");
- head = create();
- s: setbuf(stdin,NULL);
- printf("---------------------------------------------------------\n");
- printf("请选择要的操作:\n");
- printf("1.打印记录 ");
- printf("2.插入记录 ");
- printf("3.删除记录 \n");
- printf("4.更改记录 ");
- printf("5.清除记录 ");
- printf("6.退出程序 \n");
- printf("---------------------------------------------------------\n");
- scanf("%d",&i);
- switch(i)//根据用户输入的不同数字来执行不同的代码
- {
- case 1:
- print(head);
- goto s;
- break;
- case 2:
- s4: setbuf(stdin,NULL);
- printf("what number are you want to insert:");
- scanf("%d",&head_2.num);
- while((ch=getchar())!='\n')
- {
- if((ch>=48&&ch<=57)||ch==46)
- {
- ;
- }
- else
- {
- printf("你的输入有误!\n");
- goto s4;
- }
- }
- s5: setbuf(stdin,NULL);
- printf("what score are you want to insert:");
- scanf("%f",&head_2.score );
- while((ch=getchar())!='\n')
- {
- if((ch>=48&&ch<=57)||ch==46)
- {
- ;
- }
- else
- {
- printf("你的输入有误!\n");
- goto s5;
- }
- }
- head = insert(head,&head_2);
- goto s;
- break;
- case 3:
- s6: setbuf(stdin,NULL);
- printf("please putinto the number you want to delete:");
- scanf("%ld",&num);
- while((ch=getchar())!='\n')
- {
- if((ch>=48&&ch<=57)||ch==46)
- {
- ;
- }
- else
- {
- printf("你的输入有误!\n");
- goto s6;
- }
- }
- head = del(head,num);
- goto s;
- break;
- case 4:
- s7: setbuf(stdin,NULL);
- printf("Please putinto the number you want to change:");
- scanf("%d",&num);
- while((ch=getchar())!='\n')
- {
- if((ch>=48&&ch<=57)||ch==46)
- {
- ;
- }
- else
- {
- printf("你的输入有误!\n");
- goto s7;
- }
- }
- s8: setbuf(stdin,NULL);
- printf("Please putinto the score you want to save:");
- scanf("%f",&score);
- while((ch=getchar())!='\n')
- {
- if((ch>=48&&ch<=57)||ch==46)
- {
- ;
- }
- else
- {
- printf("你的输入有误!\n");
- goto s8;
- }
- }
- change(head,num,score);
- break;
- case 5:
- head=clear(head);
- break;
- case 6:
- return 0;
- break;
- default:
- printf("对不起,你的输入有误,请重新输入!");
- goto s;
- break;
- }
-
- goto s;
- }
- struct student *create()
- {
- struct student *head;
- struct student *p1,*p2;
- s: setbuf(stdin,NULL);
- head = NULL;
- p1 = p2 = (struct student *)malloc(LEN);
- printf("Please purinto student's munber:");
- scanf("%ld",&p1->num );
- while((ch=getchar())!='\n')
- {
- if((ch>=48&&ch<=57)||ch==46)
- {
- ;
- }
- else
- {
- printf("你的输入有误!\n");
- goto s;
- }
- }
- s1: printf("Please putinto student's score:");
- setbuf(stdin,NULL);
- scanf("%f",&p1->score );
- while((ch=getchar())!='\n')
- {
- if((ch>=48&&ch<=57)||ch==46)
- {
- ;
- }
- else
- {
- printf("你的输入有误!\n");
- goto s1;
- }
- }
- n = 0;
- while(p1->num )
- {
- n++;
- if(n==1)
- {
- head = p1;
- }
- else
- {
- p2->next =p1;
- }
- p2 = p1;
- p1 = (struct student *)malloc(LEN);
- s2: setbuf(stdin,NULL);
- printf("Please purinto student's munber:");
- scanf("%ld",&p1->num );
- while((ch=getchar())!='\n')
- {
- if((ch>=48&&ch<=57)||ch==46)
- {
- ;
- }
- else
- {
- printf("你的输入有误!\n");
- goto s2;
- }
- }
- if(p1->num ==0)
- {
- goto e;
- }
- s3: setbuf(stdin,NULL);
- printf("Please putinto student's score:");
- scanf("%f",&p1->score );
- while((ch=getchar())!='\n')
- {
- if((ch>=48&&ch<=57)||ch==46)
- {
- ;
- }
- else
- {
- printf("你的输入有误!\n");
- goto s3;
- }
- }
- }
- e: p2->next =NULL;
- return head;
- }
- void print(struct student *head)
- {
- struct student *p;
- p = head;
- printf("共有%d条记录:\n",n);
- if(head)
- {
- do
- {
- printf("%ld号学生的成绩是:%f\n",p->num,p->score);
- p = p->next ;
- }while(p);
- }
- }
- struct student *del(struct student *head,int num)
- {
- struct student *p1,*p2;
- if(NULL == head)
- {
- printf("The List is NULL!\n");
- goto END;
- }
-
-
- p1 = head;
- while(p1->num !=num&&p1->next !=NULL)
- {
- p2 = p1;
- p1 = p1 ->next ;
- }
-
- if(num == p1->num )
- {
- if(p1 == head)
- {
- head = p1 ->next ;
- printf("Delete NO.%d succeed!\n",num);
- n--;
- }
- else
- {
- p2->next =p1->next ;
- printf("Delete NO.%d succeed!\n",num);
- n--;
- }
- }
- else
- {
- printf("NO.%d not been found!\n",num);
- }
- END:
- return head;
- }
- struct student *insert(struct student *head,struct student *head_2)
- {
- struct student *p0,*p1,*p2;
- p0 = head_2;
- p1 = head;
- if(p1==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(p1 == head)
- {
- head = p0;
- }
- else
- {
- p2->next =p0;
- }
- p0->next =p1;
- }
- else
- {
- p1->next =p0;
- p0->next =NULL;
- }
- }
- n++;
- e: return head;
- }
- struct student *clear(struct student *head)
- {
- head = NULL;
- n=0;
- printf("以清除全部记录!\n");
- return head;
- }
- void change(struct student *head,int num,float score)
- {
- struct student *p1,*p2;
- if(head == NULL)
- {
- printf("This is a NULL!\n");
- goto end_2;
- }
- p1 = head;
- while(p1->num !=num&&p1->next !=NULL)
- {
- p2 = p1;
- p1=p1->next ;
- }
- if(p1->num ==num)
- {
- p1->score = score;
- }
- else
- {
- printf("NO.%d not been found!",num);
- }
- end_2:
- printf("");
- }
复制代码 |
|