美文网首页
结构体和链表(20161220)

结构体和链表(20161220)

作者: Hassan_chao | 来源:发表于2016-12-21 08:32 被阅读36次

    ================================================
    ——复杂数据类型
    结构体
    联合体
    枚举类型
    1、结构体
    基本定义:

        struct 结构名
        {
        //成员列表
        };
    

    成员列表:
    由基本数据类型定义的变量或者构造类型的变量
    example:

            struct student
            {
            int grade;
            int age;
            char name[32]
            };
    
        student:结构体名称
        struct student:结构数据类型,相当于int,double,等基本数据类型
    struct student stu;
        stu:机构体变量
    
    访问成员:"."
    访问结构体成员:
    stu.name;
    stu.grade;
    stu.age;
    

    2、结构体变量的初始化

        struct student
        {
            char name[32];
            char sex;
            int age;
        };
    (1)初始化1
        struct student stu;
        strcpy(stu.name,"jeck");
        stu.age=24;
        stu.sex='m';
    (2)初始化2
     struct student stu1={"lily",'f',20};
    (3)初始化3:声明结构体的同时,定义结构体变量
        一、 定义结构体同时,定义变量
    struct student
    {
        char name[32];//姓名
        char sex;   //性别
        int age;    //年龄
    
    };stu,stu1;
    
        二、  定义结构体,同时初始化
    struct student
    {
        char name[32];//姓名
        char sex;   //性别
        int age;    //年龄
    
    };stu={"xiaoming",'m',23};
    

    3.无名结构体

    struct 
    {
        int age;
        char name;
    }stu;
    

    无名结构体一般不使用
    4.宏定义结构体
    宏是原地替换

        struct student
        {
        char name[32];//姓名
        char sex;   //性别
        int age;    //年龄
    
        };
    
    #define STU struct student
    
    
    STU stu,stu1;<-------> struct student stu,stu1;
    

    5.结构体的嵌套

    struct date
    {
    int year;
    int month;
    int day;
    };
    struct student
    {
    char name[32];
    int age;
    struct date birthday;
    };
    

    嵌套定义结构体:
    /*//错误,无法分配内存空间,因student的大小不确定
    struct student
    {
    int a;
    int b;
    struct student stu;
    };
    */

    //指针大小固定,可以分配空间

    struct student
    {
    int a;
    int b;
    struct student *ps;
    };
    

    6.结构体数组
    //结构体数组的初始化

        struct student arr[3] = 
        {
            {24,"hello"},
            {20,"lily"},
            {26,"jack"}
        };
    

    7.结构体大小

    struct data
    {
        char name[32];//姓名
        char sex;   //性别
        int age;    //年龄
    
    };
    #include<stdlib.h>
    malloc();//申请堆空间
    free();//释放空间
    //申请一块堆空间,大小为:sizeof(struct student)
    
    pa=(struct date *)malloc(sizeof (struct date));
    free(pa);//释放申请的堆空间
    

    8.typedef
    重新取名
    typedef int I;
    即给int 取别名为I;
    结构体

                typedef struct student
                {
                    
                }STU;
            STU stu;------>struct student stu;
    
    宏定义和typedef的区别:使用指针的情况下,会有不同
    

    9.结构体大小
    内存对齐:
    Linux 4字节;
    Windows 8字节;
    默认从偏移量为0的位置开始存储
    所占字节数,是其自身大小的整数倍
    10.联合体

        union untype
        {
            int a;
            long b;
        };
    

    特点:每次只能操作一个成员变量,
    分配空间,按最大数据类型空间分配
    11.枚举类型

        enum entype
        {
            A,
            B,
            C
        };
    

    12.链表
    链式存储结构,线性 存储结构
    其大小可动态改变,链表是由一个个节点串起来的数据链
    节点:
    由数据域和指针域组成,
    数据域:用来存放数据
    指针域:存放下一个节点的地址
    (1)创建链表

            struct student
     {
        int id;     
        struct student *next;
     } ;
    struct student *head;
    malloc()
    free()
    

    创建一个头节点:

        struct student *head;
        head=(struct student*)malloc(sizeof(struct student));
    

    头节点标识一个链表,即链表名
    头结点的数据域不存放数据,指针域存放第一个节点的地址,头结点只是为了标识这个链表

    typedef struct student
        {
            int ID;
            char name[32];
            struct student *next;
        }STU,*pSTU;
    
        数据类型        别名
    struct student *   <=====>   pSTU(指针类型)
    struct student     <=====>   STU
    

    ===================================

    相关文章

      网友评论

          本文标题:结构体和链表(20161220)

          本文链接:https://www.haomeiwen.com/subject/kzzfvttx.html