结构体注意事项:
1.结构体类型可以定义在main函数里面,但是此时的作用域就被限定在该函数中
2.结构体的的的定义的形式:a.先定义类型,后定义变量-----struct stu s
b.定义类型的同时,定义了变量:struct stu {......}s;
c.省略了结构体名字(只用一次的时候可以这样写):struct {.....}s;
一,共用体
union 共用体名
{
成员列表;
};
目的:节省空间。所有自定义的数据共用一块空间,大小由最大的那个类型所占的字节决定。
注意:1.共用体的初始化只能给一个值,默认给到第一个变量
2.共用体成员变量辅助:共用体用的数据最终存储的 --- 应该是最后一次给到的值。
但是只能影响到 自己数据类型对应的空间中的数据。
3.共用体类型可以是函数参数,也可以是返回值的类型:共用体,结构体类型定义出来之后 a.定义变量 ; b.定义数组 ; c.定义指针 ; d.做函数参数,返回值类型
4.可以判断大小端
5.共用体的大小 --是成员变量中最大的那个成员的大小
6.实际用途 a.节省空间 b.进行数据转换
二,枚举
概念:如果一个变量只有几种可能的值,则可以定义为枚举类型。所谓“枚举”是指将变量的值一一列举出来,变量的值只限于列举出来的值的范围内。
eg:若从键盘输入1~7代表星期的英文名称
enum weekday
{
sun, ------ 写的是名字()
mon,
wed,
thu,
fri,
sat,
};
注意: 1.枚举提高了代码的可读性
2.枚举的本质是int型,与整型兼容
3.枚举的不足:本质上是个整型类型,所以枚举的类型并不能真正限制在指定的范围内
4.枚举类型 可以做函数 形参 和 返回值 , 定义数组也可以,本质上就是整型数据
三,链表
数据结构:数据的组织形式(逻辑上理解的形式)
eg:数组---连续性,有序性,单一性
优点:有下标就能随机访问任意元素,便捷性
缺点:拓展数据不方便,删除数据也不方便
数据的组织形式 -- - -- 会决定使用数据的算法
链表是链式的数据表
优点:增加 删除数据很方便
缺点:找数据不大方便
计算机中如何体现链式结构数据:
存放链式数据的结构:节点 【数据 | 另外一个节点的指针】
eg:[数据1|指针] [数据2指针] [数据3|指针]
操作:
1.创建一个链表 --- 空链表 //有头链表 --可以更方便的处理链表 //无头链表
空链表的特点:只有头节点,并且头节点的指针域 为NULL //相当于是尾节点
2.插入
尾插:思路:
s1.创建一个新的节点
struct Node *pNew = malloc(sizeof(struct Node));
//放在了堆区
//
s2.找到尾节点
struct Node *p = &head; //此时p在头节点
while( p->next != NULL )
{
p = p->next; //让p指向下一个节点
}
s3.链接到尾节点后面
p->next = pNew;
pNew->next = NULL; //尾节点
代码实现:
头插: 思路:
int length(struct Node *head)
{
//统计有效节点的个数
}
//头插
void pushFront(struc Node *head,int data)
{
//1.创建新节点
pNew
//2.链接
pNew->next = p->next;
p->next = pNew;
}
代码实现:
链表的插入本质(自我总结):
尾部插入:指针指到唯一可以得到的头节点,拿到指针域的地址,得到下一个链表存放的位置,重复不断地找链表成员,然后找到next为NULL的尾节点为止。然后将next为NULL的换成新链表的地址,将新链表的next改为 NULL。
头部插入:新节点的next要先和首节点连接也就是头节点next存放的地址,此时在把新节点的地址给到头节点中。此时新节点又做为了首节点。