|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
- #include <stdio.h>
- #include <malloc.h>
- #include <stdlib.h>
- #define LEN sizeof(struct student)
- struct student *creat(); //创建链表
- void print(struct student *head); //打印链表
- struct student
- {
- int num;
- float score;
- struct student *next;
- };
- int n; //全局变量,用来记录存放了多少数据。
- void main()
- {
- struct student *stu;
- stu = creat();//这里将create的返回值head赋值给stu
- print( stu );//不明白head的指向,为什么知道head的值就能进行打印?
- printf("\n\n");
- system("pause");
- }
- struct student *creat()
- {
- struct student *head;
- struct student *p1, *p2;
-
- p1 = p2 = (struct student *)malloc(LEN);//这里的 (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);//这里开辟的是新的节点还是什么,分配的len的长度又是多少,为什么要分配大小为sizeof(len>的内存。
- printf("\nPlease enter the num :");
- scanf("%d", &p1->num);//
- printf("Please enter the score :");
- scanf("%f", &p1->score);
- }
- p2->next = NULL;
- 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 );
- }
- }
复制代码
struct student
{
int num;
float score;
struct student *next;
};
一个 int 4个字节
一个 float 4个字节
一个 struct student *next 4个字节
p1,p2指向它的时候只是指针变量本身占用内存
|
|