建立和输出有若干个学生记录的带头结点的单向链表,用指针类型的函数creat () 创建链表,返回链表的头指针,函数中定义了3个指针变量,head 为头指针,p1指向新结点,p2为尾指针指向尾结点。
#include<stdio.h>
#include<stdlib.h>
#define PT "学号: %ld 姓名: %-10s 成绩: %6.1f\n",p->num,p->name,p->score
#define N sizeof(struct stud)
struct stud
{
long num;
char name[11];
float score;
struct stud *next;
};
void print(struct stud *p)
{
p=p->next;
while(p!=NULL)
{
printf(PT);
p=p->next;
}
}
struct stud *creat(void)
{
struct stud *p1,*p2,*head;
head=p2=(struct stud *)malloc(N);
printf("请输入学号 姓名 成绩(学号输入0结束)\n");
p1=(struct stud *)malloc(N);
scanf("%ld %s %f",&p1->num,p1->name,&p1->score);
while(p1->num!=0)
{
p2->next=p1;
p2=p1;
p1=(struct stud *)malloc(N);
scanf("%ld %s %f",&p1->num,p1->name,&p1->score);
}
p2->next=NULL;
free(p1);
return head;
}
int main()
{
struct stud *head;
head=creat();
print(head);
}