DBS第02章结构与联合、数组、链表.ppt
《DBS第02章结构与联合、数组、链表.ppt》由会员分享,可在线阅读,更多相关《DBS第02章结构与联合、数组、链表.ppt(56页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第二章第二章 两种基本数据结构两种基本数据结构内容提要内容提要 1 1、结构与联合;、结构与联合;2 2、数组;、数组;3 3、链表。、链表。2.1 2.1 结构与联合结构与联合结构结构是是C C语言提供的语言提供的聚合数据聚合数据的机制。使用结构可以将的机制。使用结构可以将不同类型的数据组合成一个整体。不同类型的数据组合成一个整体。例如:例如:struct studentstruct student char name20;char name20;char sex;char sex;int age;int age;数据项数据项:每个数据每个数据每个数据每个数据项称为一个结构体项称为一个结构体
2、项称为一个结构体项称为一个结构体的成员的成员的成员的成员如:如:struct student struct student strcpy(studentA.name,Wang);strcpy(studentA.name,Wang);studentA.age=19;studentA.age=19;studentA.sex=M;studentA.sex=M;studentA;studentA;成员运算符成员运算符“.”“.”studentA.age+studentA.age+;struct student student2;struct student student2;student2=stud
3、entA;student2=studentA;ANSI CANSI C允许将一个结构变量整体赋值给另一个具有允许将一个结构变量整体赋值给另一个具有相同结构的结构变量。相同结构的结构变量。不能将一个结构变量作为一个整体进行输入和输出,不能将一个结构变量作为一个整体进行输入和输出,也不能直接判定两个结构是否相同。也不能直接判定两个结构是否相同。printf(“%dn”,studentA);printf(“%dn”,studentA);printf(“studentA:%s,%d,%cn”,studentA.name,studenprintf(“studentA:%s,%d,%cn”,student
4、A.name,studentA.age,studentA.sex);tA.age,studentA.sex);可逐个全部或部分输入输出。可逐个全部或部分输入输出。定义变量的语句:定义变量的语句:struct student student1 struct student student1;用用typedeftypedef创建结构类型创建结构类型StudentStudent:typedef struct studenttypedef struct student char name20;char name20;char sex;char sex;int age;int age;Student S
5、tudent;结构名结构名结构类型名结构类型名Student student1;Student student1;结构名称与结构名称与结构类型的结构类型的名称可以相名称可以相同同2.1.2 2.1.2 联合联合 联合联合(union)(union)是一个变量,它可以存放不同类型是一个变量,它可以存放不同类型的数据对象。的数据对象。联合的目的是联合的目的是使用单一变量,存放多个类型的使用单一变量,存放多个类型的值值。显然任何时候只能存放其中之一。显然任何时候只能存放其中之一。union tag union tag int ival;int ival;float fval;float fval;c
6、har chval;char chval;;union tag aunion tag a,b b;联合可以放在结构或数组中,反之亦然。联合可以放在结构或数组中,反之亦然。访问一个结构中的联合的成员等同于访问嵌套的结访问一个结构中的联合的成员等同于访问嵌套的结构变量。构变量。引用联合的成员引用联合的成员ivalival的方式是:的方式是:symtabi.u.ival symtabi.u.ivalstruct struct char name20;char name20;int flags;int flags;int utype;int utype;union union int ival;int
7、 ival;float fval;float fval;char chval;char chval;u;u;symtab maxsize;symtab maxsize;用用typedeftypedef创建自己的联合类型。创建自己的联合类型。typedef union tag typedef union tag int ival;int ival;float fval;float fval;char chval;char chval;Constval Constval;2.2 2.2 数组数组数组与结构相同之处:数组与结构相同之处:一一旦旦定定义义,便便不不能能再再增增加加和和删删除除元元素素,
8、只只能能访访问问和和修修改改数数组元素的值,因此被称为组元素的值,因此被称为静态数据结构静态数据结构。静态数据结构的特点:静态数据结构的特点:一个静态数据结构一旦建立,它包含的元素个数将不变。一个静态数据结构一旦建立,它包含的元素个数将不变。动态数据结构:动态数据结构:数据元素个数可变的数据结构,可以在动态数据结构中数据元素个数可变的数据结构,可以在动态数据结构中插入或删除数据元素。插入或删除数据元素。数组与结构不同之处:数组与结构不同之处:数组的元素具有相同的数据类型,而结构的元数组的元素具有相同的数据类型,而结构的元素素(域域)可以是不同类型。可以是不同类型。数组元素用下标标识,而结构的域
9、由域名引用。数组元素用下标标识,而结构的域由域名引用。2.2.1 2.2.1 一维数组一维数组C C语言中的一维数组:语言中的一维数组:int one5;int one5;数组元素可以在定义时赋值:数组元素可以在定义时赋值:int one5=0,1,2,3,4;int one5=0,1,2,3,4;也可以通过引用数组元素对元素赋值。也可以通过引用数组元素对元素赋值。for(i=0;i5;i+)onei=i;for(i=0;i5;i+)onei=i;下标从下标从0 0到到4 4例如例如 int a5 int a5;a aa 4 a 4 a 3 a 3 a 2 a 2 a 1 a 1 a 0 a
10、0 数组通常采用数组通常采用顺序表示顺序表示,即数组中的元素按一定,即数组中的元素按一定顺序存放在一个顺序存放在一个连续的存储区域连续的存储区域。Loc(ai)=Loc(a0)+i*kLoc(ai)=Loc(a0)+i*k起始地址起始地址前前i i个元素占用个元素占用的存储单元的的存储单元的数量数量2.2.2 2.2.2 二维数组二维数组二维数组二维数组(two-dimensional array)(two-dimensional array)的下标是二维的。的下标是二维的。int a34;int a34;aa0a1a2a10a10 a11a11 a12a12 a13a13a00a00 a01
11、a01 a02a02 a03a03 a20a20a21a21a22a22a23a23可以认为二维数组是每个元素都是一维数组的一维可以认为二维数组是每个元素都是一维数组的一维数组数组将一个二维数组映射到一维的存储空间将一个二维数组映射到一维的存储空间一般有两种顺序:一般有两种顺序:行优先顺序行优先顺序(row major order)(row major order)列优先顺序列优先顺序(column major order)(column major order)行优先顺序的地址计算:行优先顺序的地址计算:若若已已知知每每个个数数组组元元素素占占k k个个存存储储单单元元,第第一一个个数数组组
12、元元素素a00a00的的存存储储地地址址是是loc(a00),loc(a00),则则数数组组元元素素aijaij的的存存储储地地址址loc(aij)loc(aij)为为loc(aij)=loc(a00)+(i*n+j)*kloc(aij)=loc(a00)+(i*n+j)*k (0(0 im;0im;0 j j n)n)a00 a01a0n-1 a10 a11a1n-1 am-10 am-11am-1n-1a00 a01a0n-1 a10 a11a1n-1 am-10 am-11am-1n-1 -下标为下标为0 0的行的行-下标为下标为1 1的行的行-下标为下标为m-1m-1的行的行-行优先顺
13、序行优先顺序列优先顺序存储:列优先顺序存储:loc(aij)=loc(a00)+(j*m+i)*k (0loc(aij)=loc(a00)+(j*m+i)*k (0 im;0im;0 j j n)n)a00 a10am-10 a01 a11am-11 a0n-1 a1n-1am-1n-1 a00 a10am-10 a01 a11am-11 a0n-1 a1n-1am-1n-1-下标为下标为0 0的列的列-下标为下标为1 1的列的列-下标为下标为n-1n-1的列的列-列优先顺序列优先顺序随机存取的存储结构随机存取的存储结构 存取数组中任何一个元素所需的时间是相同的存取数组中任何一个元素所需的时间
14、是相同的维数和各维的长度维数和各维的长度分配存储空间分配存储空间数组元素下标数组元素下标根据相应的地址计算公式求根据相应的地址计算公式求得数组元素的存储位置来存得数组元素的存储位置来存取元素取元素 static int a34=1,0,6,0,0,11;static int a34=1,0,6,0,0,11;静态存储变量存放在静态存储变量存放在静态存储区静态存储区中。中。二维数组的初始化二维数组的初始化0110000600001采用采用typedeftypedef定义二维数组类型:定义二维数组类型:typedef int atype34;typedef int atype34;atype a=
15、1atype a=1,00,66,00,0 0,11;11;或或typedef int atype14;typedef int atype14;typedef atype1 atype23;typedef atype1 atype23;atype2 a=1atype2 a=1,00,66,00,0 0,11;11;推广到多维数组推广到多维数组amam1 1mm2 2 m mn n,数组元素数组元素aiai1 1ii2 2 i in n 的存储地址为的存储地址为 :loc(ailoc(ai1 1ii2 2 i in n)=loc(a00)=loc(a00)+(i +(i1 1*m*m2 2*m*
16、m3 3*m*mn n +i+i2 2*m*m3 3*m*m4 4*m*mn n +i +in-1n-1*m*mn n +i+in n )*k)*k(0(0 i ij jmmj j,1,1 j j n)n)2.2.3 2.2.3 多维数组的顺序表示多维数组的顺序表示数组元素的存储位置是其下标的数组元素的存储位置是其下标的线性函数线性函数。通过。通过计算地址便可实现对数组元素的计算地址便可实现对数组元素的随机存取随机存取。C C语言中数组是语言中数组是不允许整体赋值不允许整体赋值的。的。C C语言中对数组下标超出正常范围的访问语言中对数组下标超出正常范围的访问并不限制并不限制 例如:例如:int
17、int a5 a5 a a3=03=0;a7=1;a7=1;数组是静态数据结构,其存储空间的大小需具体数组是静态数据结构,其存储空间的大小需具体确定,并确定,并预先分配预先分配,一旦分配则难以扩充。,一旦分配则难以扩充。顺序存储表示是实现数据结构的重要存储方式,顺序存储表示是实现数据结构的重要存储方式,一般借助数组来描述。一般借助数组来描述。2.3 2.3 链表链表课堂提要课堂提要课堂提要课堂提要第第第第2 2 2 2章章章章两种基本数据结构两种基本数据结构 2.1 2.1 结构与联合结构与联合2.2 2.2 数组数组2.3 2.3 链表链表2.3.1 2.3.1 指针指针 单链表单链表2.3
18、.3 2.3.3 双向双向链表链表2.3.4 2.3.4 循环循环链表链表2.3.1 2.3.1 指针指针C C语言中,指针语言中,指针(pointer)(pointer)也称为链也称为链(link)(link)。对任意类型对任意类型T T,都可定义指向该类型的指针类型。,都可定义指向该类型的指针类型。指针类型变量的值:是一个指针类型变量的值:是一个存储地址存储地址。int i,*pi;int i,*pi;与与指针类型相关的运算符:指针类型相关的运算符:取地址运算符取地址运算符&间接引用运算符间接引用运算符 *用来对指针变量所指示的变量进行操作。用来对指针变量所指示的变量进行操作。int i,
19、*pi;int i,*pi;pi=&i;pi=&i;i=5;i=5;printf(%d printf(%d,i);i);*pi=10;*pi=10;printf(%d printf(%d,*pi);*pi);变量变量i i 变量变量pi pi 254=254=5=102 2指针和数组指针和数组 C C语言中,任何在数组上执行的运算都可以使用指针实语言中,任何在数组上执行的运算都可以使用指针实现。现。C C语言规定语言规定数组名数组名代表数组的代表数组的首地址首地址(起始地址起始地址)。int*pint*pa;a;int*p=&a0;int*p=&a0;例如:例如:int a5;int a5;等
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- DBS 02 结构 联合 数组 链表
限制150内