链表

xiaoxiao2021-02-28  15

建立动态链表:

#include <stdio.h> #include <stdlib.h> #define LEN sizeof(struct Student) struct Student{ long num; float score; struct Student *next; }; int n; struct Student *creat(void) //定义函数。此函数返回一个指向链表头的指针 { struct Student *head; struct Student *p1,*p2; n=0; p1=p2=(struct Student *) malloc(LEN);//开辟一个新单元 scanf("%ld,%f",&p1->num ,&p1->score);//输入第一个学生的学号和成绩 head=NULL; while(p1->num != 0) { n+=1; if(n==1)head=p1; else p2->next =p1; p2=p1; p1=(struct Student *) malloc(LEN);//开辟动态存储区,吧起始地址赋给p1 scanf("%ld,%f",&p1->num ,&p1->score);//输入其他学生的学号和成绩 } p2->next =NULL; return(head); } int main() { struct Student *pt; pt=creat();//函数返回链表第一个节点的地址 printf("\nnum:%ld\nscore:%5.1f\n",pt->num,pt->score ); return 0; } 输出链表:

#include <stdio.h> #include <stdlib.h> #include <malloc.h> #define LEN sizeof(struct Student) struct Student{ long num; float score; struct Student *next; }; int n; struct Student *creat(void) //定义函数。此函数返回一个指向链表头的指针 { struct Student *head; struct Student *p1,*p2; n=0; p1=p2=(struct Student *) malloc(LEN);//开辟一个新单元 scanf("%ld,%f",&p1->num ,&p1->score);//输入第一个学生的学号和成绩 head=NULL; while(p1->num != 0) { n+=1; if(n==1)head=p1; else p2->next =p1; p2=p1; p1=(struct Student *) malloc(LEN);//开辟动态存储区,吧起始地址赋给p1 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; //使p指向第一个节点 if(head!=NULL) //若不是空表 do{ printf("\nnum:%ld\nscore:%5.1f\n",p->num,p->score ); p=p->next; //p指向下一个节点 }while(p!=NULL); //当p不是空地址 } void main() { struct Student *head; head=creat();//函数返回链表第一个节点的地址 print(head); } /* 1001,67.6 1003,87.0 1005,99.0 0,0 */

转载请注明原文地址: https://www.6miu.com/read-450291.html

最新回复(0)