结构体和链表(20161220)

2016-12-21  本文已影响36人  Hassan_chao

================================================
——复杂数据类型
结构体
联合体
枚举类型
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

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

上一篇 下一篇

猜你喜欢

热点阅读