结构体与链表

结构体:任意由程序员定义的新类型

struct student (标识符)

{

};(末尾分号不能省略)

定义结构体类型的方法:

1.先声明结构体,再定义变量名。

2.在声明类型的同时定义变量。

 

3.直接定义结构体类型变量

s1,s2在全局区,若省略student,使用者只能使用定义好的全局变量。

结构体变量的引用

 1.结构体整体不能打印,只能对结构体变量中的各个成员分别进行输入和输出。如下:

2.对结构体变量的成员可以像普通变量一样进行各种运算(根据其类型决定可以进行的运算)。

注:int  i 抽象与具体的关系

. 为结构体成员运算符

3.可以引用结构体变量成员的地址,也可以引用结构体变量的地址。

结构体变量的初始化

{}为初始化链表,顺序必须与声明的顺序一致。

若只初始化一部分,则其余部分为0,与数组相似。

结构体也可以被嵌套

结构体对齐规则:

1、结构体按照其最长成员大小对齐,意味着最终的大小必须是最长成员大小的整数倍;

2、结构体成员按照结构体成员声明先后次序依次存放,并且每个成员的首字节放置的位置必须能够整除成员的字节数;

3、如果结构体某个成员的字节数大于CPU的字节数,则最长按照CPU的字节数对齐;

(test2中,最长的是struct test1,但要按照cpu字节数8对齐)

4、用预处理命令#pragma pack(n) 可以强制编译器按照指定的n来对齐,合法的n的数值分别是1、2、4、8、16。

注:

1.若有结构体数组,则按数组基类型对齐,而非数组整体大小对其。

2.结构体对齐问题:提高cpu执行效率而舍弃内存。

结构体变量作为函数参数

结构体变量作为函数参数时,通常使用指针传参。效率高。

为了使用方便和使之直观,可以把(*p).num改用p->num来代替,它表示p所指向的结构体变量中的num成员。同样,(*p).name等价于p->name。也就是说,以下3种形式等价:
①结构体变量.成员名
②(*p).成员名
③ p->成员名   如:

结构体可以允许直接赋值;

结构体数组逆序

结构体变量之间整体不能相互比较,但成员可以相互比较

上式分别比较成绩和名字

用指针处理链表

1.值域:要装的东西本身

指针域:指向下一个节点

2.节点个数有限 ,头指针只保存第一个结点指针。

3.删除与插入算法复杂度都为1,效率高于数组

4.节点从堆上来,所有的链表从空链表开始,

5.链表不具有连续性,不能通过首元素地址+n访问第n个元素地址

6.分类:有头链表与无头链表

7.第一个有用的节点为头节点

8.空链表:真正有用的节点一个都不存在

判断是否为空链表:

  • 14
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值