内容正文:
第9章 结构体、共用体与枚举类型
本章内容
9.1结构体类型的定义
9.2结构体变量
9.3结构体数组
9.4结构体类型指针
9.5结构体与函数
9.6链表
9.7共用体类型
9.8枚举类型
9.9类型定义
9.10综合案例
链表的输出
void output(STUDENT *head)
{
STUDENT *p;
p=head;
while(p!=NULL)
{
printf("%5d,%5.1f
",p->num,p->score);
p=p->next;
}
}
链表的查找
STUDENT *search(STUDENT *head,int num)
/*head链表头结点,num要查找的学号*/
{
STUDENT *p;
p=head;
while(p!=NULL)
{
if(p->num==num)
return p;
else
p=p->next;
}
return NULL;
}
链表的插入
图9.3 链表节点插入操作
STUDENT *insert(STUDENT *head,STUDENT *p)
{
STUDENT *p1,*p2;
p2=head;
if(head==NULL) /*没有插入点*/
{
p->next=NULL;
head=p;
}
else /*有插入点*/
{
while((p->num > p2->num) && p2!=NULL) /*查找插入点*/
{
p1=p2;
p2=p2->next;
}
if(p1==head) /*插入位置为第1个结点的前面*/
{
p->next=head;
head=p;
}
else /*插入点位于中间或末尾*/
{
p->next=p2;
p1->next=p;
}
}
return head;
}
链表的删除
图9.4(a) 删除链表第1个节点
图9.4(b) 删除链表其它节点
STUDENT *delete(STUDENT * head,int num)
{
STUDENT *p1,*p2;
p2=head;
if(head==NULL) /*如果链表为空*/
{
printf("
List is null
");
return head;
}
p2=head;
while(num!=p2->num && p2->next!=NULL)/*查找删除节点*/
{
p1=p2;
p2=p2->next;
}
if(p2->next!=NULL) /*如果不是链表的末尾,即找到了删除结点p2*/
{
if(p2==head) /*如果要删除的是第1个结点*/
head=p2->next;
else
p1->next=p2->next;
free(p2);
printf("
delete %d successfully",num);
}
else /*没有找到删除结点*/
printf("%d not be found!",num);
return head;
}
9.7共用体类型
共用体类型与共用体变量
指将不同的数据项组织成一个整体,它们在内存中占用同一段存储单元
共用体类型定义
union 共用体名
{
成员说明列表
};
例如:
union data
{
int a ;
float b;
char c;
double d;
};
共用体变量的说明
先定义共用体类型,再定义共用体变量。
例如:
union data
{
int a ;
float b;
char c;
double d;
};
union data d1,d2;
共用体变量的说明
在定义共用体类型的同时定义共用体变量。
例如:
union data
{
int a ;
float b;
char c;
double d;
}d1,d2;
共用体变量的说明
定义共用体类型时,省略共用体类型名,同时定义共用体类型变量。
union
{
int a ;
float b;
char c;
double d;
}d1,d2;
9.7.2共用体变量的使用
共用体变量不能同时存放多个成员的值,而只能存放其中的一个值,这就是最后赋给它的值。
例如:
d1.a=50;
d1.c=’M’;
d1.d=20.5;
共用体变量d1的最后的值为:
20.5;
指针变量引用共用体成员
例如:
union data *pt,x;
pt=&x;
pt->a=120;
pt->b=123.5;
pt->c=’M