|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
- #include <stdio.h>
- #include <stdlib.h>
- #define LEN sizeof(struct student)
- struct student
- {
- long num;
- float score;
- struct student *next;
- };//after define the struct type ,you must take leave a ";"
- int n;
- struct student *create(void)// Here struct student could be looked as int, float and...
- //so the returned value is the struct student type
- {
- struct student *p1, *p2, *head;
- n = 0;
- p1 = p2 = (struct student *) malloc(LEN);
- scanf("%ld %f", &p1->num, &p1->score);
- head = NULL;
- while(p1->num != 0)
- {
- n = n+1;
- if(n == 1)
- {
- head = p1;
- }
- else
- {
- p2->next = p1;//This is the key algorithm 1
- }
- p2 = p1;// 2
- p1 = (struct student *) malloc(LEN);// 3
- scanf("%ld %f", &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("%ld %8.1f\n", p->num, p->score);
- p = p->next;
- }while(p != NULL);
- }
- }
- struct student *del(struct student *head, long num)
- {
- struct student *p1, *p2;
- if(head == NULL)
- {
- printf("\nlist null!\n");
- return head;
- }
- p1 =head;
- while(num != p1->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("delete:%ld\n", num);
- n = n-1;
- }
- else
- {
- printf("%ld not been found!\n", num);
- }
- return head;
- }
- struct student *insert(struct student *head, struct student *stud)
- {
- struct student *p0, *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;
- }
- }
- int main()
- {
- struct student *head, *stu;
- long del_num;
- printf("intput record:\n");
- head = creat();
- print(head);
- printf("\ninput the deleted number: ");
- scanf("%ld", &del_num);
- while(del_num != 0)
- {
- head = del(head, del_num);
- print(head);
- printf("intput the deleted number:");
- scanf("%ld", &del_num);
- }
- printf("input the inseted record: ");
- stu = (struct student *) malloc(LEN);
- scanf("%ld %f", &stu->num, &stu->score);
- while(stu->num != 0)
- {
- head = insert(head, stu);
- print(head);
- printf("input the insert record:");
- stu = (struct student *) malloc(LEN);
- scanf("%ld %f", &stu->num, &stu->score);
- }
- return 0;
- }
复制代码 我电脑的系统的Win7的,此程序基本上全是按照书上敲的。
能运行 不过当出来黑框的时候出现了程序停止工作。。。
不知道错误原因啊,求大神!!!!
|
-
|