一、结构的基础知识

结构式一些值的集合,这些值称为成员变量。结构的每个成员可以是不同类型的变量。

二、结构的声明

struct tag

{

Member_list;

}variable_list;这里会直接创建全局变量

//struct 结构体关键字 Stu - 结构体标签 struct Stu - 结构体类型
struct Stu
{
	//成员变量
	char name[20];
	short age;
	char tele[12];
	char sex[5];
}s1,s2, s3;//s1, s2, s3 是三个全局的结构体变量

结构体变量的类型

结构的成员可以是标量、数组、指针,甚至可以是其他结构体。

struct S 
{
	int a;
	char c;
	char arr[20];
	double d;
};

struct T
{
	char ch[10];
	struct S s;
	char* pc;
};

int main()
{
	char arr[] = "hello world\n";
	struct T t = {"hehe", {100, 'w', "hello world", 3.14}, arr};
	printf("%s\n", t.ch);
	printf("%s\n", t.s.arr);
	printf("%lf\n", t.s.d);
	printf("%s\n", t.pc);
	return 0;
}

三、结构体变量的定义和初始化

结构式一些值的集合,这些值称为成员变量。结构的每个成员可以是不同类型的变量。

ypedef struct Stu//typedef 定义struct Stu 这个结构体类型为Stu
{
	//成员变量
	char name[20];
	short age;
	char tele[12];
	char sex[5];
}Stu;


四、结构体传参

函数传参的时候,参数是需要压栈的。如果传递一个结构体对象的时候,结构体过大,参数压栈的系统开销比较大,所以会导致性能的下降。

void Print1(Stu tmp)
{
	printf("name: %s\n", tmp.name);
	printf("age: %d\n", tmp.age);
	printf("tele: %s\n", tmp.tele);
	printf("sex: %s\n", tmp.sex);
}

void Print2(Stu* ps)
{
	printf("name: %s\n", ps -> name);
	printf("age: %d\n", ps -> age);
	printf("tele: %s\n", ps -> tele);
	printf("sex: %s\n", ps -> sex);
}

int main()
{
	Stu s = {"李四", 40, "1121468217", "男"};
	//打印结构体数据
	//Print1 和 Print2那个好
	//1会直接复制结构体过去,而2只传参数,更加优越
	Print1(s);
	
	Print2(&s);
	
	return 0;
}

(函数的栈帧的创建与销毁)

数据结构

----线性数据结构

顺序表

链表

栈:先进去后出,后进去先出。往栈里插入一个元素,叫压栈;删除一个元素叫出栈。

队列

----树形数据结构

二叉树

----图