|
2鱼币
为什么insert插入结点,插入在头结点位置会有问题?求解:
- /*****************************************/
- /***********简单的数据链表程序************/
- /*****************************************/
- #include <stdio.h>
- #include <conio.h>
- #include <malloc.h>
- #define LEA sizeof(struct student)
- struct student
- {
- int num;
- float score;
- struct student *next;
- };
- struct student *expror(); //创建链表;
- void print(struct student *head); //打印链表;
- struct student *del(struct student *head, int num); //删除结点;
- struct student *insert(struct student *head, struct student *p); //插入结点;
- void main()
- {
- struct student *p, *p1, *Max;
- int n = 0;
-
- p = expror();
- print(p);
-
- printf("Please input Number delete: ");
- scanf("%d", &n);
- print(del(p, n));
-
- p1 = (struct student *)malloc(LEA);
- printf("Please input Number insert: ");
- scanf("%d", &p1->num);
- printf("Please input Score insert: ");
- scanf("%f", &p1->score);
- Max = insert(p, p1);
- print(Max);
- getch();
- }
- struct student *expror()
- {
- struct student *p1, *p2, *head;
- int n = 0;
- head = NULL;
-
- p1 = p2 = (struct student *)malloc(LEA);
- printf("Please input Number: ");
- scanf("%d", &p1->num);
- printf("Please input Score: ");
- scanf("%f", &p1->score);
-
- while(p1->num)
- {
- n++;
- if(1 == n)
- {
- head = p1;
- }
- else
- {
- p2->next = p1;
- p2 = p1;
- }
- p1 = (struct student *)malloc(LEA);
- printf("Please input Number: ");
- scanf("%d", &p1->num);
- printf("Please input Score: ");
- scanf("%f", &p1->score);
- }
- p2->next = NULL;
- return head;
- }
- void print(struct student *head)
- {
- while(head != NULL)
- {
- printf("Number = %d\t\tScore = %f\n", head->num, head->score);
- head = head->next;
- }
- }
- struct student *del(struct student *head, int num)
- {
- struct student *p1, *p2;
- p1 = head;
- if(head == NULL)
- {
- printf("Fuck you!!!");
- }
- else
- {
- while(p1->next != NULL && p1->num != num)
- {
- p2 = p1;
- p1 = p1->next;
- }
- if(p1->num == num)
- {
- if(head == p1)
- {
- head = p1->next;
- }
- else
- {
- p2->next = p1->next;
- }
- }
- }
- return head;
- }
- struct student *insert(struct student *head, struct student *p)
- {
- struct student *p0, *p1, *p2;
- p1 = head;
- p0 = p;
- if(head == NULL)
- {
- printf("Fuck you!!!");
- }
- else
- {
- while(p0->num > p1->num && p1->next != NULL)
- {
- p2 = p1;
- p1 = p1->next;
- }
- if(p0->num < p1->num)
- {
- if(head == p1)
- {
- head = p0;
- p0->next = p1;
- }
- else
- {
- p2->next = p0;
- p0->next = p1;
- }
- }
- else
- {
- p1->next = p0;
- p0->next = NULL;
- }
- }
- return head;
- }
复制代码
|
|