第11章 结构体和共同体.ppt
文本预览下载声明
;;例如:在计算机等级考试管理系统中,每个考生都
有如下信息 :;;例如: int x; float y; char a[30]; ;11.2.2 结构体变量的定义;方法二:在定义类型时,直接说明变量。;方法三: 嵌套定义。(如果有需要的时候); 先定义类型,再用类型说明变量
在定义类型时,直接说明变量
用一个已定义的结构类型来定义另一结构类型中的成员—— 嵌套定义
都符合标识符先定义后使用的原则。;11.2.3 结构体变量的访问;一、结构体变量的初始化: ;struct s
{ long num;
char name[20];
char sex;
}student={ 97031, li ming , m } ;;二、结构变量的引用:;2、两个同类型的结构体变量可互相整体赋值。 ; 单个结构体变量没有实际的意义,可用简单变量来完成工作。仅当结构体与数组相结合时,才能解决复杂问题。
结构体数组: 用结构类型定义数组。即每个数组元素是结构类型。;二、结构体数组的引用: ;例程1:;;访问成员时,有三种表示:
结构体变量 . 成员
p?成员名
(*p). 成员名
注: *p . 成员名 错,*比 . 级别低 ;; 由于是动态地分配存储单元,使得被分配的单元是独立的,即单元之间的地址不连续,从而不能利用已学过的方法访问这些单元。可利用链表来解决上述矛盾。;一、什么是链表?;; 每个结点必须是结构变量,至少有两个成员:一个用来存放该结点的数据,另一个存放下一个结点的地址。;stu2; 1、 可动态地分配和释放存储空间。
2、 只能通过前一个结点才能找到下一个结点,
即只能顺序访问结点 ,不能象数组 那样随
机访问。; 头指针很重要,它代表链表的首地址,故不要轻易地改变。;单链表、环链表、双链表 …;11.5.2 动态内存分配与释放函数; 内存分配函数,在动态区中分配一个长度为 size的连续空间,分配成功,返回一个指向该空间首地址的指针,未成功,返回值=0。;11.5.3 链表的使用;2、给 3个指针赋初值,建立第一个结点:
head = NULL ;
pnew = (struct stu *)malloc(LEN) ;
head = pnew ;
prear = pnew ;
并给首结点各域赋值。 ;#define LEN sizeof( struct student )
#define STU struct student
struct student
{ long num;
float score;
struct student ?next;
}; ;建立链表
STU ?creat( )
{ // 赋初值
STU ?head, ?p1, ?p2 ,int n=0;
head=NULL;
p1= (STU ?) malloc(LEN);
scanf(%d, %f , p1?num, p1?score);; p1 = (STU ?) malloc(LEN);
scanf(%ld, %f, p1?num, p1?score);
};void print ( STU ?head )
{ STU ?p ;
p = head ;
if (p = = NULL) return ;
do
{ printf(%ld %5.1f \n, p?num, p?score) ;
p = p?next ;
}while (p != NULL) ;
};stu2; 一般给出某一条件,当某一条件成立时,则删除该结点: ; p1 = head;
while (num!=p1?num p1?next!=NULL)
{ p2=p1; p1=p1?next; } 寻找删除点; 一般链表中结点的关键数据按顺序输入,待插入结点的关键数据与链表中的关键数据一一比较,插入适当的位置。;步骤:
1、定义3个指针new(
显示全部