C语言程序设计第7章结构体与链表结构体与函数
链表 例7-8 建立5个员工的链表,并对链表进行遍历、查找、插入和删除操作。 4、增加某个结点 s=(Employee*)malloc(sizeof(Employee)); s->ID=id; s->salary=sala; s->next=p->next; p->next=s; C语言程序设计 第7章 结构体与链表 第7章 结构体与链表 学习目的与要求: 理解并掌握结构体的定义和应用 掌握类型定义符typedef的使用方法 理解并掌握链表的定义与使用方法 了解共用体的定义及使用方法 了解枚举变量的使用方法 基本内容 链表 结构体 类型定义符typedef 本章小结 枚举类型 共用体 结构体 结构体是程序员根据需要定义的一种数据类型。组成结构体的数据称为结构体的成员,这些成员来共同描述一个相关的对象。 struct structureName{ type member1; type member2; … }; struct Person{ char name[20]; char sex; int age; int height; }; 结构体 由于结构体是程序设计者声明的一种数据类型,是对具体实例的抽象,所以在声明一个结构体时,不要实例化,即不要对成员赋初值。 struct Point { int x=0; //error 无法存储x. int y=0; //error }; 结构体 结构体成员除基本数据类型外,还可为指针或结构体类型。 struct Date{ int year; int month; int day; }; struct Person1{ char *name; //指针类型 struct Date birthday; //结构体类型 int height; }; 结构体类型变量的定义 (1)先定义结构体类型,再定义结构体变量。 struct Person ps1,ps2; (2)在定义一个结构体类型的同时,定义结构体变量。 struct Point{ int x; }pt; (3)直接定义结构体变量,省略结构体名称。 struct { int x; }pt; 结构体类型变量的定义 (1)结构体类型与结构体变量是两个不同的概念,只能对结构体变量赋值、存取或运算,但不能对结构体类型赋值、存取和运算。 (2)在编译时,系统根据结构体所有成员的大小只对变量分配存储空间,而声明类型时不分配空间。 (3)结构体类型中的成员名可以与程序中的变量名同名,但它们表示不同的对象。例如在结构体struct Person中的成员“age”与程序中的变量“age”名字相同,意义不同。 结构体成员的访问 结构体变量名.成员名 struct Point pt; pt.x=0;//给结构体变量pt的成员赋值 printf("x=%\n", pt.x); //输出x的值 结构体成员的访问 例7-1 对一个人的信息(姓名和生日)进行操作。 解题思路:首先定义生日结构体类型,包括出生年、月、日,再定义“人”的结构体类型,包括姓名和生日。定义“人”结构体变量,对其进行赋值并输出。 #include #include struct Date{ int year; int month; int day; }; struct Person1 { char name[20]; struct Date birthday; }; struct Person1 ps1={"Zhang",{1988,11,20}},ps2; printf("输入相关信息(姓名和出生年月日):\n"); scanf("%s",ps1.name); //输入姓名 scanf("%d%d%d",&ps1.birthday.year, &ps1.birthday.month, &ps1.birthday.day); ps2 =ps1; strcpy(ps2.name,"李四"); ps2.birthday.day+=8; printf("输出人的相关信息:\n"); printf("姓名:%s\n生日:%d-%d-%d\n",ps1.name,ps1.birthday.year, ps1.birthday.mont