您的位置: 网站首页 > 程序开发 > 数据结构 > 第1章 绪论 > 【1.3 抽象数据类型的表示与实现】

1.3 抽象数据类型的表示与实现

 

1.3  抽象数据类型的表示与实现

将按某种逻辑关系组织起来的一组数据元素,按一定的存储方式存储在计算机中,并在其上定义了一个运算的集合,称为一个数据结构。

数据类型是高级程序设计语言中的一个基本概念,它和数据结构的概念密切相关。

一方面,在程序设计语言中,每一个数据都属于某种数据类型。类型显式或隐式地规定了数据的取值范围、存储方式以及允许进行的运算。因此可以认为,数据类型是在程序设计语言中已经实现了的数据结构。

另一方面,在程序设计过程中,当需要引入某种新的数据结构时,必须借助编程语言提供的数据类型来描述数据的存储结构。

下面总结C/C++语言中常用的数据类型。

1.3.1  C/C++语言的基本数据类型

C/C++语言中的基本数据类型有int型、float型和char型。int型可以有3个修饰符:short(短整型)、long(长整型)和unsigned(无符号整型)。

1.3.2  C/C++语言的指针类型

C/C++语言允许直接对存放变量的地址进行操作。如定义:

int i,*p;

其中,i是整型变量;p是指针变量(它用于存放某个整型变量的地址)。表达式&i表示变量i的地址,将p指向整型变量i的运算为:p=&i

对于指针变量p,表达式*p是取p所指变量的值,例如:

i=2;p=&i;

printf("%d\n",*p);

输出结果为i的值即2。可以使用malloc()函数为指针分配一片连续的空间,例如:

char *p;

p=(char *)malloc(10*sizeof(char));

p="China";

printf("%c\n",*p);

printf("%s\n",p);

上述代码先定义字符指针变量p(没有指向有效的字符数据,即p的值没有意义),使用malloc()函数为其分配长度为10个字符的空间,将该空间的首地址赋给p(尽管不知道这个地址是多少,但p的值已经有了意义),再将字符串“China”放到该空间中,所以第1printf语句输出的是首地址的字符即“C”,而第2printf语句输出的是整个字符串即“China”。

1.3.3  C/C++语言的数组类型

数组是同一类型的一组有序数据的集合。数组有一维数组和多维数组。数组名标识一个数组,下标指示一个数组元素在该数组中的顺序位置。

数组下标的最小值称为下界,在C/C++语言中总是为0。数组下标的最大值称为上界,在C/C++语言中数组上界为数组定义值减1。例如,int a[10]定义了包含10个整数的数组a

1.3.4  C/C++语言中的结构体类型

结构体是由一组称为结构体成员的数据项组成的,每个结构体成员都有自己的标识符。例如:

struct teacher

{

  int no;

  char name[8];

  int age;

};

定义了一个结构体类型teacher,有以下代码:

struct teacher t1={1,"陈华",34};             /*定义结构体变量t1并初始化*/

struct teacher t2={5,"王强",48};             /*定义结构体变量t2并初始化*/

printf("%d,%s,%d\n",t1.no,t1.name,t1.age);  /*输出结构体变量t1的各成员值*/

printf("%d,%s,%d\n",t2.no,t2.name,t2.age);  /*输出结构体变量t2的各成员值*/

执行结果如下:

1,陈华,34

5,王强,48

1.3.5  C/C++语言中的共用体类型

共用体是把不同的成员组织为一个整体,它们在存储器中共享一段存储单元,但不同成员以不同的方式被解释。例如:

union tag

{  

  short int n;

  char ch[2];

};

定义了一个共用体类型tag,有以下代码:

union tag u;

u.n=0x4142;

printf("%c,%c\n",u.ch[1],u.ch[0]);

通过赋值后,成员n的两个字节中,高位为64,低位为65,分别对应u.ch[1]u.ch[0]成员,所以printf输出为AB

1.3.6  C/C++语言中的自定义类型

C/C++语言中允许使用typedef关键字来定义同名的数据类型名,例如:

typedef char ElemType;

char类型与ElemType等同起来。特别是将代码较长的结构体类型定义用新类型来替代,例如:

typedef struct student

{  

  int no;

  char name[10];

  char sex;

  int cno;

}StudType;

这样,StudType等同于学生结构体类型,可以使用该类型定义变量:

StudType s1,s2;

等同于:

struct student s1,s2;