结构体 、共用体、枚举
数据类型:
基本数据类型
整型
浮点型
字符型
构造类型
数组类型
指针类型
void类型
注意:
1.结构体 --- 用来实现 自定义数据类型
2.用结构体
a.先构造出 数据类型
b.用数据类型 定义变量
数组
指针
访问结构体:
. //结构体成员运算符
结构体变量名.成员变量名
共用体类型可以是函数参数,也可以是函数返回值类型
共用体,结构体类型定义出来之后,
a.定义变量
b.定义数组
c.定义指针
d.做函数参数,返回值类型
枚举:
一枚一枚列举
逐个列举
如果一个变量只有几种可能的值,则可以定义为枚举类型。
所谓“枚举”是指将变量的值一一列举出来,
变量的值只限于列举出来的值的范围内。
一 结构体类型的定义
(1)结构体类型定义的一般形式
使用结构体类型时,首先要“构造”它,如同在调用函数之前要先定义函数一样。结构体类型的定义方式是:
struct 结构体类型名称{
数据类型 成员名1;
数据类型 成员名2;
......
数据类型 成员n;
};
说明:
(1)struct是关键字,结构体类型名称的命名规则满足标识符命名规则。
(2)结构体类型中的“成员”由大括号“{ }”括起来,用来说明该结构体有哪些成员以及各成员的数据类型。
(3)结构体类型定义末尾括号后的分号“ ; ”并不可少。
(2)类型定义
链表
3、处理链表所需要的函数
C语言提供了一些内存管理函数,这些内存管理可以按需动态地分配内存空间,也可以把不在使用的空间回收,为有效地利用内存资源提供了手段。
常用的内存管理函数有malloc(),calloc(),free(),realloc()这4个函数。
malloc(),calloc(),free(),realloc()这4个函数的声明在stdlib.h头文件中,在用到这些函数时需要用“#include <stdlib.h>”命令将头文件包含到程序文件中。
1. malloc()函数
malloc()函数的原形为: void *malloc(unsigned size);
其调用形式为: (类型说明符*)malloc(size);
功能:在内存的动态存储区中分配一块长度为size字节的连续区域。函数的返回值为该区域的首地址,这个地址是void类型,因此,在调用时要用“类型说明符”进行强制类型转换。如果分配失败,则返回一个NULL指针。例如:
头插法:
假如我们要在头节点phead后面插入节点p:
(1)把头节点的指针域指向P节点,即pHead->pNext=p;
(2)把p节点的指针域指向NULL,即p->pNext=NULL;
这样就可以了吗? 想想我们就可以发现,当我们要插入多个节点时,头节点始终指向最后添加的一个数据,以前的节点通过头指针此时已经找不到了;我们定义一个尾指针pTail,始终用来指向链表的结尾,每次只在pTail后面添加节点。
伪算法:
(1)定义一个尾指针pTail,并初始化,使它指向头节点,即pTail=pHead;
(2)在pTail后面添加节点,修改指针:
pTail->pNext=p;
p->pNext=NULL;
pTail=p; //使pTail指向链表最后一个元素
删除元素:
假如要删除节点2,只需要把节点1指针域指针指向节点3,但不要忘记释放节点2所占的内存,否则将会造成内存泄漏;首先必须找到节点2的前驱节点1,假设p指向节点1。
(1)q=p->pNext; //首先用q保存要删除节点的地址;
(2)p->pNext=q->pNext; //q->pNext=p->pNext->pNext; 修改指针使节点1指向节点3;
(3)free(q); //释放节点2所占的内存;
尾删:
头删:
清空链表: