|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 ~风介~ 于 2015-10-13 20:16 编辑
- #include<stdio.h>
- #include<malloc.h>
- #include<stdlib.h>
- #define LEN sizeof(struct student) //student 结构的大小
- struct student *creat();
- struct student *del(struct student *head,int num); //del 函数用于删除结点, *head 即是链表
- struct student *add(struct student *head,struct student *stu_2); //需要被插入的链表
- // 待插入的结构的地址
- void print(struct student *head); //打印链表
- struct student
- {
- int num;
- float score;
- struct student *next;
- };
- int n;
- void main()
- {
- struct student *stu,*p,stu_2;
- int n;
- stu = creat();
- p = stu;
- print(p);
- printf("Please enter the num to delete:");
- scanf("%d",&n);
- print(del (p,n) );
- printf("Please enter the num to add:");
- scanf("%d",&stu_2.num);
- printf("Please input the score to add: ");
- scanf("%f",&stu_2.score);
- p = add(stu,&stu_2);
- print(p);
- printf("\n\n");
- system ("pause");
- }
- struct student *creat()
- {
- struct student *head;
- struct student *p1,*p2;
- p1 = p2 = (struct student *)malloc(LEN);
- printf("Please enter the num:");
- scanf("%d",&p1->num);
-
- printf("Please enter the score:");
- scanf("%f",&p1->score);
-
- head = NULL;
- n = 0;
- while (p1-> num)
- {
- n++;
- if(1 == n)
- {
- head = p1;
-
- }
- else
- {
- p2->next = p1;
- }
-
- p2=p1;
- p1=(struct student *)malloc(LEN);
- printf("\nPlease enter the num:");
- scanf("%d",&p1->num);
- printf("Please enter the score:");
- scanf("%f",&p1->score);
-
-
- }
- p2->next = NULL;
- return head;
- }
- struct student *add(struct student *head,struct student *stu_2)
- {
- struct student *p0,*p1,*p2;
- p1 = head;
- p0 = stu_2;
- if(NULL == head)
- {
-
- 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;
- }
- struct student *del(struct student *head,int num)
- {
- struct student *p1,*p2;
- if(NULL == head)
- {
- printf("\nThis 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;
- }
- else //一般情况
- {
-
- p2->next = p1->next;
- }
- printf("\nDelete NO:%d succeed!\n",num);
- n = n-1; //n 是作为一个全局变量,用来记录链表的数据数
- }
- else
- {
- printf("%d not been found!\n",num);
-
- }
- END:
- return head;
- }
- void print(struct student *head)
- {
- struct student *p;
- printf("\nThere are %d records!\n\n",n);
-
- p=head;
- if(head)
- {
- do
- {
- printf("学号为%d的成绩是:%f\n",p->num,p->score);
- p = p->next;
-
- }while(p);
- }
- }
复制代码
|
|