6. 单链表学习记录¶
[dong@localhost code]$ more list1.c #define NULL 0 #define LEN sizeof (struct student) /*2017-01-24: centos下vim不方便输入中文,用SecureCRT远程登录后就可以比 较方便的录入中文了! */ /*隐式声明与内建函数‘malloc’不兼容 [默认启用],增加头文件说明 */ #include <stdio.h> #include <stdlib.h> struct student { long num; float score; struct student * next; }; int n; struct student * creat() /*此函数带回一个指向链表头的指针 */ { struct student * head; struct student * p1,* p2; n = 0; p1 = p2 = (struct student *)malloc(LEN); /* malloc 开辟一个结点 ,让p1、p2都指向它 */ /*在一般系统中,malloc带回的是指向字符型数据的指针, 这里使用了强制类型 转换的方法,用(struct student *)来把malloc()带回的指向字符类型数据的 指针强制转换为指向struct student类型数据的指针 */ 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; p2 = p1; p1 = (struct student *)malloc(LEN); scanf("%ld,%f",&p1->num,&p1->score); } p2->next = NULL; return(head); } void print(head) struct student * head; { struct student *p; printf("\nNow,These %d records are:\n",n); p = head; if(head!=NULL) do { printf("%ld %5.1f\n",p->num,p->score); p = p->next; }while(p!=NULL); } main () { struct student * head; printf("input records:\n"); head=creat(); print(head); }
[dong@localhost code]$
[dong@localhost code]$ cc list1.c
[dong@localhost code]$ ./a.out
input records:
85698789,88
0
Now,These 1 records are:
85698789 88.0
::
[dong@localhost code]$ ./a.out
input records:
888888888,85
203,89
5230147,90
8632158,88
863214587,95
5632,72
0
Now,These 6 records are:
888888888 85.0
203 89.0
5230147 90.0
8632158 88.0
863214587 95.0
5632 72.0