带头节点单链表的建立 (C语言完整版)

#include
#include
#define N 5
typedef struct node
{
char name[20];
float score;
struct node *next;
}stud;


stud *creat(int n)
{
stud *p, *h, *s;
int i;
if((h=(stud*)malloc(sizeof(stud)))==NULL)
{
printf("No memory space can be allocated!");
exit(0);
}
h->name[0]='\0';
h->score=0;
h->next=NULL;
p=h;
for(i=0;i {
if((s=(stud*)malloc(sizeof(stud)))==NULL)
{
printf("No memory space can be allocated!");
exit(0);
}
p->next=s;
printf("Enter the %d name and score ",i+1);
scanf("%s%f",s->name,&s->score);
s->next=NULL;
p=s;
}
return(h);
}


void print(stud *h)//输出链表
{
int n;
stud *p;
printf("\n Now, These %d records are:\n",N);
p=h->next ; //如果选择p=h,则头结点中的数据域中会出现乱码
if(h !=NULL)
do
{
printf("%s %f\n",p->name,p->score);
p=p->next;
}while(p!=NULL);
}






main()
{
int number;
stud *head;
number=N;
head=creat(number);
print(head);
}

转自——http://www.360doc.com/content/12/1214/13/8363527_253983319.shtml

本人稍做修改

? 头结点的数据域 如果是三个 或更多 出现乱码 怎么处理

答只要让 输出函数中的p=h 改为 p=h->next;  就可以了!

你可能感兴趣的:(带头节点单链表的建立 (C语言完整版))