您的位置:首页 > 编程语言 > C语言/C++

C语言:建立动态链表

2015-04-10 10:28 232 查看
先贴代码,再做分析:

#include<stdio.h>
typedef struct Student{
    long num;
    float score;
    struct Student *next;
} Student;

int n;
Student * create(){
    Student *head,*p1,*p2;
    n = 0 ;
    //开辟新结点 同时使p1 p2指向该结点
    p1=p2=(Student *)malloc(sizeof(Student));  
    scanf("%d %f",&p1->num,&p1->score);
    //此时head的指向为NULL
    head = NULL;
    while(p1->num != 0){
    //n代表结点数
        n=n+1;
        if(n==1){
        //n=1 说明该结点是第一个结点 使head指向该结点
            head = p1;
        }else{
        //如果不是头结点 把p1所指向的结点链接在p2所指向结点的后面
            p2->next = p1;
        }
        //使p2向前移 
        p2 = p1;
        //开辟新结点 使p1指向它
        p1 = (Student *)malloc(sizeof(Student));
        scanf("%d %f",&p1->num,&p1->score);
    }
    //循环退出之后 使p2指向NULL 因为链表的尾结点指向NULL
    p2->next = NULL;
    return head;
}

void main(){
    Student *pt;
    pt = create();
    printf("\nnum:%d\nscore:%5.1f\n",pt->num,pt->score );
    return 0;
}


思路是让p1指向新开辟的结点,p2指向链表中最后一个结点,让p1指向的结点链接在p2所指向结点的后面,用p2->next = p1实现。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: