结构体定义的时候不占空间,只有在定义了结构体对象后才占空间。
tyoedef stuct Node{
int a;
char b;
}Node;
struct Node n1;
struct Node *p=&n1;
Node *q=(Node*)malloc(sizeof(Node));
q->a=10;q->b='b';
把结构体空间放进堆里面。
练习:写一个函数对Node指针分配空间,
在写一个函数对Node 初始化。
联合体
特点: union 关键字(其它与结构体一模一样但有个区别(所有成员共用一个成员空间,取最大成员空间,联合体不能同时使用,一次只能使用一个成员))
union UNode{
int num;
double data;
char str;
};
定义一个联合体对象
union UNode _unode;
_undoe.num=10;
枚举:enum(关键字)---枚举常量
与#define mon 1 # define tue 2类似,只是不用定义那么多。
enum today{mon,tue,wed,fri,sat,sun};枚举只能是整形数。
从键盘输入一个数然后输出星期几
用switch (){case sun:
case mon:
}
数据结构:
数据:能被计算机存储并且识别的。
数据类型:不同大小的内存空间,合理分配内存空间。
数据结构:逻辑结构,物理结构(存储结构),数据运算(增删查改)
存储结构:
线性存储
顺序存储---顺序表(数组)数据必须是连续的
特点:可以节省空间,存储空间固定
struct sqlist{
int data[size];
int length;
}
创建顺序表
strcu sqlist *sq=(strcut sqlist*)malloc(sizeof(struct sqlist));
sq->length=-1;//取-1的原因是与下标相对应,-1表示数据为0;
插入输入:
bool insert_sqlist(struct sqlist *sq,int data);
删除数据:
bool delete_sqlist(struct sqlist *sqlist,int data);
查找数据:
int seek_sqlist (struct splits *sqlist,int data);
链式存储---链表