欢迎来到天天文库
浏览记录
ID:58412231
大小:766.00 KB
页数:50页
时间:2020-09-07
《数组零基础学数据结构.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第7章数组数组是一种扩展的线性数据结构。线性表、栈、队列、串的数据元素都是不可再分的原子类型,而数组中的数据元素是可以再分的。数组可以分为一维数组和多维数组,一维数组中的元素是由原子构成的,多维数组中的元素又是一个线性表。因此,数组是一种特殊的线性表。7.1数组数组是一种特殊的线性表,表中的元素可以是原子类型,也可以是一个线性表。本节主要介绍数组的定义和数组的抽象数据类型。7.1.1数组的定义数组是由n个类型相同的数据元素组成的有限序列。其中,这n个数据元素占用一块地址连续的存储空间。数组中的数据元素可以是原子类型的,如
2、整型、字符型、浮点型等,这种类型的数组称为一维数组;也可以是一个线性表,这种类型的数组称为二维数组。二维数组可以看成是线性表的线性表。7.1.2数组的抽象数据类型1.数据对象集合2.基本操作集合7.2数组的顺序表示与实现一般情况下,不对数组进行插入和删除操作。如果建立了数组,则数组的维数与各维的长度不再改变,因此,数组采用的是顺序存储方式。本节的主要学习内容包括数组的顺序存储结构及顺序存储结构下的操作实现。7.2.1数组的顺序存储结构在计算机中,存储器的结构是一维(线性)的结构。数组是一个多维的结构,如果要将一个多维的结
3、构存放在一个一维的存储单元里,就必须先将多维的数组转换成一个一维的线性序列,才能将其存放在存储器中。7.2.1数组的顺序存储结构数组的顺序存储结构类型定义描述如下:#defineMaxArraySize3#include/*标准头文件,包含va_start、va-arg、va_end宏定义*/typedefstruct{DataType*base;/*数组元素的基地址*/intdim;/*数组的维数*/int*bounds;/*数组的每一维之间的界限的地址*/int*constants;/*数组存储映
4、像常量基地址*/}Array;7.2.2数组的基本运算在顺序存储结构中,数组的基本运算实现如下所示。(1)数组的初始化操作。va_list的用法: (1)首先在函数里定义一个va_list型的变量,这个变量是指向参数的指针;(2)然后用va_start初始化变量刚定义的va_list变量,该函数的第二个参数是第一个可变参数的前一个参数,它是一个固定的参数;(3)然后用va_arg返回可变的参数,va_arg的第二个参数是要返回的参数的类型;(4)最后用va_end结束可变参数的获取。7.2.2数组
5、的基本运算(2)销毁数组操作。voidDestroyArray(Array*A)/*销毁数组。将动态申请的内存单元释放*/{if(A->base)free(A->base);if(A->bounds)free(A->bounds);if(A->constants)free(A->constants);A->base=A->bounds=A->constants=NULL;/*将各个指针指向空*/A->dim=0;}7.2.2数组的基本运算(3)返回数组中指定的元素。intGetValue(DataType*e,Array
6、A,…)/*返回数组中指定的元素,将指定的数组的下标的元素赋值给e*/{va_listap;intoffset;va_start(ap,A);if(LocateArray(A,ap,&offset)==0)/*找到元素在数组中的相对位置*/return0;va_end(ap);*e=*(A.base+offset);/*将元素值赋值给e*/return1;}7.2.2数组的基本运算(4)数组的赋值操作。intAssignValue(ArrayA,DataTypee,...)/*数组的赋值操作。将e的值赋给的指定的数组元素
7、*/{va_listap;intoffset;va_start(ap,e);if(LocateArray(A,ap,&offset)==0)/*找到元素在数组中的相对位置*/return0;va_end(ap);*(A.base+offset)=e;/*将e赋值给该元素*/return1;}7.2.2数组的基本运算(5)数组的定位操作。intLocateArray(ArrayA,va_listap,int*offset)/*根据数组中元素的下标,求出该元素在A中的相对地址offset*/{inti,instand;*of
8、fset=0;for(i=0;i9、10、instand>=A.bounds[i])return0;*offset+=A.constants[i]*instand;}return1;}7.2.3数组的应用举例下面通过一个例子来说明
9、
10、instand>=A.bounds[i])return0;*offset+=A.constants[i]*instand;}return1;}7.2.3数组的应用举例下面通过一个例子来说明
此文档下载收益归作者所有