文档详情

第11章 结构体和共同体.ppt

发布:2017-07-30约2.64千字共49页下载文档
文本预览下载声明
;;例如:在计算机等级考试管理系统中,每个考生都 有如下信息 :;;例如: 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(
显示全部
相似文档