美文网首页
结构体和链表(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)

    ================================================——复杂数据类型结...

  • Linux内核链表

    单向链表 结构体定义 单向链表示意图 双向链表 结构体定义 双向链表示意图 Linux内核链表 Linux内核定义...

  • 线性表

    线性表的基本概念与实现 顺序表和链表的比较 顺序表的结构体定义和基本操作 链表的结构体定义和基本操作 线性表的基本...

  • 1-链表基础知识

    双向链表 初始化空的链表 其中 &((type )0)->member) 是指在结构体type结构体中的membe...

  • C结构体和链表

    一,结构体变量定义及初始化 二,无名结构体 备注:无名结构体很少使用 三,宏定义结构体 四,结构体嵌套 五,结构体...

  • 单向循环链表

    结构体 链表创建 插入 删除 打印

  • 单链表:一种最简单的动态数据结构。单链表结构体中包含有指向下一结构体的指针。形式如下:struct linkl...

  • 2017年10月16日学习总结

    今天上午进行了c语言强化训练,结构体指针和单链表的处理,对于结构体指针理解的还可以,单链表理解起来特别绕,挺困难的...

  • 线性表存储结构

    数组实现 结构体实现 带头结点的单循环链表 带头结点的双循环链表 带头结点 带头结点的单循环链表和双循环链表 不管...

  • C语言之链表

    数组:方便访问,不方便插入删除链表:不必连续,定义链表,节点定义,结构体构造,生成链表和动态机制,进行链表的三个操...

网友评论

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

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