第十二章动态数据结构.ppt

第十三章 动态数据组织 动态数据结构 动态变量 链表 单向链表 栈 队列 程序设计实例 本章小结 §13.1 打印法雷序列---动态数据结构 例13-1 打印n阶法雷序列。对任意给定的自然数 n ,把所有如下形式的不可约分数 按递增顺序排列起来,称该序列为 n 级法雷序列 Fn 。 例如F8 为: 编函数,对任意给定的正整数n ,求n级法雷序列. struct farlei_item { int numerator , denominator ; struct farlei_item *next ; }; typedef struct farlei_item * farleipointer ; int gcd( int x , int y ) { /* 求最大公约数 */ if ( y==0 ) return x ; else return gcd( y , x % y ) ; } /* 生成序列 */ for ( i=2; i=n; i++) for (j=1; ji; j++) if ( gcd( i,j ) == 1 ) { /* 查 j/i 位置 r0,r */ r = fn ; while ( j*r-denominator i*r-numerator ) { r0 = r ; r = r-next ; } /* j/i 插入到 r0,r 之间 */ p = (farleipointer)malloc(sizeof(struct farlei_item)); p-numerator = j ; p-denominator = i ; r0-next = p ; p-next = r ; } return fn ; } 这就是一种动态数据结构中的——链表。动态数据结构上的一项是一个动态变量,指针是标识动态变量的有力手段。动态变量与静态变量的区别在于: 静态变量是程序中由程序员“显式”说明的变量。它有一个名字,在编译时,编译程序已经给它分配存储空间。这块存储空间用变量的名字来标识。 动态变量在程序中没有“显式”说明,它没有名字在编译时编译程序不知道有该变量,不给(也不可能给)它分配空间。 动态变量是在程序运行时 随程序存储数据的需要,申请空间函数(例如malloc,当然也是由程序员安排的)随机的动态的申请来的空间。它没有名字,一般动态变量都由指针标识。 当使用完毕后,由释放空间函数(例如free)释放,还回计算机存储管理系统,以备它用。 注意:这里所说的静态变量不是C语言中由静态存储类别static声明的变量;动态变量也不是C语言中由自动存储类别auto声明的变量。而是一般程序设计概念中的静态变量、动态变量 sizeof 运算符 单目运算符 sizeof 的 操作数是类型。 运算结果是求得相应类型的尺寸,即存储相应类型数据所需要的字节数。 sizeof(int) /* 结果是2 */ sizeof(char) /* 结果是1 */ sizeof(struct date) /* 若 struct date 是第十一章定义的日期类型,结果是6 */ malloc 函数: 原型 void *malloc(unsigned long size); 功能 申请足够大内存区域用来存储长度为size的数据对象,返回该区域的首指针,并保证该区域符合任何数据类型对存储区域开始地址和对齐的要求。 返回指针是void类型的,调用者必须使用强制类型转换,把该指针转换成所需要类型的指针。 例: float *p ; p = (float*)malloc( sizeof(float) ); struct date *pdate; pdate=(struct dat

文档评论(0)

1亿VIP精品文档

相关文档