C语言:创建动态单向链表,创建完成后,输出每一个节点的数据信息。

简介:

//

//  main.c

//  dynamic_link_list

//

//  Created by ma c on 15/8/5.

//  Copyright (c) 2015. All rights reserved.

//  要求:写一个函数建立有3名学生数据的动态单向链表,并输出链表中每个结点的所有内容。

 

/*

建立动态链表的思想:

  1、开辟一个新结点,并使p1,p2指向它;

  2、读入一个学生数据给p1所指的结点;

  3、head = NULL,n = 0;

  4、判断读入的p1->num是否为0。

       如果p1->num!=0,n = n+1;此时n==1?

                                如果n==1,head=p1(p1所指的结点作为第一个结点)

                                如果n!=1,p2->next=p1(把p1所指的结点连接到表尾)

                                        p2=p1;(p2移到表尾)

                                        再开辟一个新结点,使p1指向它;

                                        读入一个学生数据给p1所指接点;

                                        表尾结点的指针变量置NULL。

       如果p1->num==0,链表结束,退出程序。

 

 输出链表的思想:

   1、p=head,使p指向第一个结点

   2、判断p指向的是不是尾节点?

            如果不是,输出p所指向的结点,p指向下一个结点;

            如果是,链表结束,退出程序。

*/

#include <stdio.h>

#include<stdlib.h>

#define LEN sizeof(Student)

typedef struct student

{

    int num;

    float socre;

    struct student *next;

}Student;

int n;     //定义一个全局变量

Student *createlist(void)

{

    Student *p1,*p2,*head;

    int n = 0;

    //开辟一个新单元

    p1 = p2 = (Student*)malloc(LEN);

    //输入第一个学生的学号和成绩

    scanf("%d,%f",&p1->num,&p1->socre);

    head = NULL;

    while(p1->num!=0)

    {

        n = n+1;

        if(n==1)

        {

            head = p1;

        }

        else

        {

            p2->next = p1;

        }

        p2 = p1;

        p1 = (Student *)malloc(LEN);

        scanf("%d,%f",&p1->num,&p1->socre);

    }

    p2->next = NULL;

    return head;

}

void printlink(Student *pt)

{

    while(pt!=NULL)

    {

        printf("\nnum:%d\nscore:%5.1f\n",pt->num,pt->socre);//输出每个结点的成员值

        pt = pt->next;

    }

}

int main(int argc, const char * argv[])

{

    Student *pt;

    pt = createlist();//函数返回链表的第一个结点的地址

    printlink(pt);

    return 0;

}

 

程序猿神奇的手,每时每刻,这双手都在改变着世界的交互方式!


本文转自当天真遇到现实博客园博客,原文链接:http://www.cnblogs.com/XYQ-208910/p/4705803.html,如需转载请自行联系原作者

目录
相关文章
|
12天前
|
存储 Python
Python 实现单向链表,和单向链表的反转
链表是一种数据结构,每个节点存储相邻节点的位置信息。单链表中的节点仅存储下一节点的位置。通过Python实现单链表,定义`ListNode`类并关联节点可创建链表。例如,创建A-&gt;B-&gt;C的链表后,可通过反转函数`reverse`将链表反转为CBA。代码展示了如何实现和操作单链表。
Python 实现单向链表,和单向链表的反转
|
3月前
|
存储 程序员 编译器
C 语言中的数据类型转换:连接不同数据世界的桥梁
C语言中的数据类型转换是程序设计中不可或缺的一部分,它如同连接不同数据世界的桥梁,使得不同类型的变量之间能够互相传递和转换,确保了程序的灵活性与兼容性。通过强制类型转换或自动类型转换,C语言允许开发者在保证数据完整性的前提下,实现复杂的数据处理逻辑。
|
3月前
|
存储 数据管理 C语言
C 语言中的文件操作:数据持久化的关键桥梁
C语言中的文件操作是实现数据持久化的重要手段,通过 fopen、fclose、fread、fwrite 等函数,可以实现对文件的创建、读写和关闭,构建程序与外部数据存储之间的桥梁。
|
4月前
|
存储 数据建模 程序员
C 语言结构体 —— 数据封装的利器
C语言结构体是一种用户自定义的数据类型,用于将不同类型的数据组合在一起,形成一个整体。它支持数据封装,便于管理和传递复杂数据,是程序设计中的重要工具。
|
4月前
|
存储 编译器 数据处理
C 语言结构体与位域:高效数据组织与内存优化
C语言中的结构体与位域是实现高效数据组织和内存优化的重要工具。结构体允许将不同类型的数据组合成一个整体,而位域则进一步允许对结构体成员的位进行精细控制,以节省内存空间。两者结合使用,可在嵌入式系统等资源受限环境中发挥巨大作用。
128 12
|
5月前
(剑指offer)18、删除链表的节点—22、链表中倒数第K个节点—25、合并两个排序的链表—52、两个链表的第一个公共节点(2021.12.07)
(剑指offer)18、删除链表的节点—22、链表中倒数第K个节点—25、合并两个排序的链表—52、两个链表的第一个公共节点(2021.12.07)
71 0
|
5月前
|
存储 C语言 C++
深入C语言,发现多样的数据之枚举和联合体
深入C语言,发现多样的数据之枚举和联合体
深入C语言,发现多样的数据之枚举和联合体
|
5月前
|
存储 C语言
深入C语言内存:数据在内存中的存储
深入C语言内存:数据在内存中的存储
|
5月前
|
算法 Java
数据结构与算法学习六:单向环形链表应用实例的约瑟夫环问题
这篇文章通过单向环形链表的应用实例,详细讲解了约瑟夫环问题的解决方案,并提供了Java代码实现。
48 0
|
5月前
|
C语言
回溯入门题,数据所有排列方式(c语言)
回溯入门题,数据所有排列方式(c语言)