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

转载 2007年09月18日 16:26:00

<iframe style="WIDTH: 89.81%; HEIGHT: 64px" src="http://pagead2.googlesyndication.com/pagead/ads?client=ca-pub-4577827332549849&amp;dt=1192819750500&amp;lmt=1192819750&amp;prev_fmts=468x60_as&amp;format=468x15_0ads_al_s&amp;output=html&amp;correlator=1192819750437&amp;channel=1741427766&amp;pv_ch=1741427766%2B&amp;url=http%3A%2F%2Fyzkzoo.5d6d.com%2Fthread-68-1-1.html&amp;color_bg=FFFFFF&amp;color_text=000000&amp;color_link=0000FF&amp;color_url=008000&amp;color_border=336699&amp;ref=http%3A%2F%2Fyzkzoo.5d6d.com%2Fforum-16-1.html&amp;cc=100&amp;ga_vid=1025434795.1192631677&amp;ga_sid=1192817968&amp;ga_hid=1871659779&amp;ga_fc=true&amp;flash=8&amp;u_h=768&amp;u_w=1024&amp;u_ah=738&amp;u_aw=1024&amp;u_cd=32&amp;u_tz=480&amp;u_his=2&amp;u_java=true"></iframe>

<iframe style="WIDTH: 44.33%; HEIGHT: 259px" src="http://pagead2.googlesyndication.com/cpa/ads?client=ca-pub-4577827332549849&amp;cpa_choice=CAEaCB94-nvUZWENUB9QugJQtwRQTVAgULcCUB4&amp;oe=gb2312&amp;dt=1192720966468&amp;lmt=1192720966&amp;format=250x250_as&amp;output=html&amp;correlator=1192720966453&amp;channel=2735220158&amp;url=http%3A%2F%2Fyzkzoo.5d6d.com%2Fthread-67-1-1.html&amp;color_bg=FFFFFF&amp;color_text=000000&amp;color_link=0000FF&amp;color_url=008000&amp;color_border=336699&amp;ad_type=text_image&amp;region=_google_cpa_region_&amp;ref=http%3A%2F%2Fyzkzoo.5d6d.com%2Fforum-16-1.html&amp;cc=100&amp;ga_vid=1025434795.1192631677&amp;ga_sid=1192720940&amp;ga_hid=1155529757&amp;ga_fc=true&amp;flash=8&amp;u_h=768&amp;u_w=1024&amp;u_ah=738&amp;u_aw=1024&amp;u_cd=32&amp;u_tz=480&amp;u_his=2&amp;u_java=true"></iframe>

一、抽象数据类型定义(ADT)

作用:抽象数据类型可以使我们更容易描述现实世界。例:用线性表描述学生成绩表,用树或图描述遗传关系。

定义:一个数学模型以及定义在该模型上的一组操作。

关键:使用它的人可以只关心它的逻辑特征,不需要了解它的存储方式。定义它的人同样不必要关心它如何存储。

例:线性表这样的抽象数据类型,其数学模型是:数据元素的集合,该集合内的元素有这样的关系:除第一个和最后一个外,每个元素有唯一的前趋和唯一的后继。可以有这样一些操作:插入一个元素、删除一个元素等。

抽象数据类型分类
原子类型 值不可分解,如int
固定聚合类型 值由确定数目的成分按某种结构组成,如复数
可变聚合类型 值的成分数目不确定如学生基本情况

抽象数据类型表示法:

一、

三元组表示:(D,S,P)

其中D是数据对象,S是D上的关系集,P是对D的基本操作集。

二、书中的定义格式:

ADT 抽象数据类型名{

数据对象:<数据对象的定义>

数据关系:<数据关系的定义>

基本操作:<基本操作的定义>

}ADT 抽象数据类型名

例:线性表的表示

名称 线性表  
数据对象 D={ai| ai(-ElemSet,i=1,2,...,n,n>=0} 任意数据元素的集合
数据关系 R1={<ai-1,ai>| ai-1,ai(- D,i=2,...,n} 除第一个和最后一个外,每个元素有唯一的直接前趋和唯一的直接后继
基本操作 ListInsert(&L,i,e) L为线性表,i为位置,e为数据元素。
ListDelete(&L,i,e)
...

二、类C语言语法

类C语言语法示例
1、预定义常量和类型 #define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2
typedef in Status; //Status是函数的类型,其值是函数结果状态代码。
2、数据结构的存储结构 typedef ElemType first;
3、基本操作的算法 函数类型 函数名(函数参数表){
//算法说明
语句序列
}//函数名

4、赋值语句 简单赋值: 变量名=表达式; 
串联赋值: 变量名1=变量名2=...=变量名k=表达式; 

成组赋值:  (变量名1,...,变量名k)=(表达式1,...,表达式k);
结构名=结构名;
结构名=(值1,...,值k);
变量名[]=表达式;
变量名[起始下标..终止下标]=变量名[起始下标..终止下标];

交换赋值: 变量名<-->变量名;
条件赋值: 变量名=条件表达式?表达式?表达式T:表达式F
5、选择语句 1、if(表达式) 语句;
2、if(表达式) 语句;
else 语句;
3、switch(表达式){
case 值1:语句序列1;break;

...
case 值n:语句序列n;break;
default:语句序列n+1;break;
}
4、switch{
case 条件1:语句序列1;break;

...
case 条件n:语句序列n;break;
default:语句序列n+1;break;
}

6、循环语句 for(赋初值表达式;条件;修改表达式序列)语句;
while(条件)语句;
do{ 语句序列}while(条件);
7、结束语句 return [表达式];
return; //函数结束语句
break; //case结束语句
exit(异常代码); //异常结束语句

8、输入和输出语句 scanf([格式串],变量1,...,变量n);
9、注释 //文字序列
10、基本函数 max(表达式1,...,表达式n)
min,abs,floor,ceil,eof,eoln 
11、逻辑运算 &&与运算;||或运算

例:线性表的实现:
ADT List{

数据对象: D={ai| ai(-ElemSet,i=1,2,...,n,n>=0}

数据关系: R1={<ai-1,ai>| ai-1,ai(- D,i=2,...,n}

基本操作:

InitList(&L)
DestroyList(&L)
ListInsert(&L,i,e)
ListDelete(&L,i,&e)

}ADT List

ListInsert(List &L,int i,ElemType e)

{if(i<1||i>L.length+) return ERROR;

q=&(L.elem[i-1]);

for(p=&(L.elem[L.length-1]);p>=q;--p) *(p+1)=*p;

*q=e;

++L.length;

return OK;

}

下面是C语言编译通过的示例:

#define ERROR 0
#define OK 1
struct STU
{ char name[20];
char stuno[10];
int age; int score;
}stu[50];
struct LIST
{ struct STU stu[50];
int length;
}L;

int printlist(struct LIST L)
{ int i;
printf("name stuno age score/n");
for(i=0;i<L.length;i++)
printf("%s %s/t%d/t%d/n", L.stu.name, L.stu.stuno, L.stu.age, L.stu.score);
printf("/n");
}

int listinsert(struct LIST *L,int i,struct STU e)
{ struct STU *p,*q;
if (i<1||i>L->length+1)
return ERROR;
q=&(L->stu[i-1]);
for(p=&L->stu[L->length-1];p>=q;--p)
*(p+1)=*p; *q=e; ++L->length;
return OK;
}/*ListInsert Before i */

main()
{ struct STU e;
L.length=0;
strcpy(e.name,"zmofun");
strcpy(e.stuno,"100001");
e.age=80;
e.score=1000;
listinsert(&L,1,e);
printlist(L);
printf("List length now is %d./n/n",L.length);

strcpy(e.name,"bobjin");
strcpy(e.stuno,"100002");
e.age=80;
e.score=1000;
listinsert(&L,1,e);
printlist(L);
printf("List length now is %d./n/n",L.length);
}

 

E:/ZM/Zmdoc/datastru/class02>listdemo

name stuno age score

zmofun 100001 80 1000

List length now is 1.

name stuno age score

bobjin 100002 80 1000

zmofun 100001 80 1000

List length now is 2. 

 

三、总结

抽象数据类型定义;

抽象数据类型实现方法:一、类C语言实现 二、C语言实现 

<iframe style="WIDTH: 52.39%; HEIGHT: 263px" src="http://pagead2.googlesyndication.com/cpa/ads?client=ca-pub-4577827332549849&amp;cpa_choice=CAEaCKcC4yuPlq5lUDRQDVAtUK4BUENQCA&amp;oe=gb2312&amp;dt=1192819388296&amp;lmt=1192819388&amp;format=300x250_as&amp;output=html&amp;correlator=1192819388281&amp;channel=2735220158&amp;url=http%3A%2F%2Fyzkzoo.5d6d.com%2Fviewthread.php%3Ftid%3D70%26page%3D1%26extra%3Dpage%253D1&amp;color_bg=FFFFFF&amp;color_text=000000&amp;color_link=0000FF&amp;color_url=008000&amp;color_border=336699&amp;ad_type=text_image&amp;region=_google_cpa_region_&amp;ref=http%3A%2F%2Fyzkzoo.5d6d.com%2Fpost.php%3Faction%3Dedit%26fid%3D16%26tid%3D70%26pid%3D70%26page%3D1%26extra%3Dpage%253D1&amp;cc=100&amp;ga_vid=1025434795.1192631677&amp;ga_sid=1192817968&amp;ga_hid=1527165455&amp;ga_fc=true&amp;flash=8&amp;u_h=768&amp;u_w=1024&amp;u_ah=738&amp;u_aw=1024&amp;u_cd=32&amp;u_tz=480&amp;u_his=5&amp;u_java=true"></iframe>

<iframe style="WIDTH: 82.23%; HEIGHT: 74px" src="http://pagead2.googlesyndication.com/pagead/ads?client=ca-pub-4577827332549849&amp;dt=1192818497343&amp;lmt=1192818497&amp;format=468x60_as&amp;output=html&amp;correlator=1192818497343&amp;channel=1741427766&amp;url=http%3A%2F%2Fyzkzoo.5d6d.com%2Fthread-68-1-1.html&amp;color_bg=FFFFFF&amp;color_text=000000&amp;color_link=0000FF&amp;color_url=008000&amp;color_border=336699&amp;ad_type=text_image&amp;ref=http%3A%2F%2Fyzkzoo.5d6d.com%2Fforumdisplay.php%3Ffid%3D16%26page%3D1&amp;ui=rc%3A6&amp;cc=100&amp;ga_vid=1025434795.1192631677&amp;ga_sid=1192817968&amp;ga_hid=1000484876&amp;ga_fc=true&amp;flash=8&amp;u_h=768&amp;u_w=1024&amp;u_ah=738&amp;u_aw=1024&amp;u_cd=32&amp;u_tz=480&amp;u_his=6&amp;u_java=true"></iframe>

<iframe style="WIDTH: 58.41%; HEIGHT: 156px" src="http://pagead2.googlesyndication.com/pagead/ads?client=ca-pub-4577827332549849&amp;dt=1192819750656&amp;lmt=1192819750&amp;prev_fmts=468x60_as%2C468x15_0ads_al_s%2C234x60_as&amp;format=200x90_0ads_al_s&amp;output=html&amp;correlator=1192819750437&amp;channel=1741427766&amp;pv_ch=1741427766%2B&amp;url=http%3A%2F%2Fyzkzoo.5d6d.com%2Fthread-68-1-1.html&amp;color_bg=FFFFFF&amp;color_text=000000&amp;color_link=0000FF&amp;color_url=008000&amp;color_border=336699&amp;ref=http%3A%2F%2Fyzkzoo.5d6d.com%2Fforum-16-1.html&amp;cc=100&amp;ga_vid=1025434795.1192631677&amp;ga_sid=1192817968&amp;ga_hid=1871659779&amp;ga_fc=true&amp;flash=8&amp;u_h=768&amp;u_w=1024&amp;u_ah=738&amp;u_aw=1024&amp;u_cd=32&amp;u_tz=480&amp;u_his=2&amp;u_java=true"></iframe> 

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

记得大二的时候学习严蔚敏大神的《数据结构》,满本书的抽象结构,抽象这个,抽象那个,直接整蒙了。最困难的就是概念本来就晦涩难懂,而且书里面也没有可以直接运行的代码,真头疼。好在最近发现高一凡编写的《数据...
  • sdtvyyb_007
  • sdtvyyb_007
  • 2015年12月06日 15:00
  • 727

数据结构(一) 抽象数据类型的表示与实现 代码示例

抽象数据类型三元组Triplet的表示和实现
  • jianguo798937767
  • jianguo798937767
  • 2017年03月16日 11:12
  • 673

数据结构(一) 抽象数据类型的表示与实现

1.抽象数据类型可通过原有的数据类型组合来表示和实现。 2.C语言中,预定义常量格式如下:   #define OK 1 预定义常量用于在程序中多次用到且不想改变变量的值的情况下。 3.ty...
  • jianguo798937767
  • jianguo798937767
  • 2017年03月16日 10:08
  • 403

抽象数据类型(ADT)入门(一)

抽象数据类型(ADT)入门(一) 1、抽象数据类型(Abstract Data Types,ADT)和ADT的实现 抽象数据类型:一个数据元素集合以及在这些数据上的操作。 ADT的一个实现包括存储数...
  • FRD2009041510
  • FRD2009041510
  • 2015年03月20日 16:40
  • 1771

C语言 抽象数据类型ADT

一、概述 在嵌入式系统开发中,随着系统功能要求越来越多,除了硬件系统不断扩展外,芯片中软件设计的规模也越来大,算法越来越复杂,所以需要对程序结构进行良好设计,方便后来的修改和维护。为类型的属...
  • dengcanjun6
  • dengcanjun6
  • 2016年05月22日 14:15
  • 1438

数据类型和抽象数据类型

  数据类型和抽象数据类型  在用高级程序设计语言编写的程序中,必须对程序中出现的每个变量、常量或表达式,明确说明它们所属的数据类型。例如,C语言中的基本数据类型有:整型、字符型、实型(包括单精度型和...
  • m57091003
  • m57091003
  • 2007年12月02日 14:04
  • 2525

抽象数据类型与类层次(一)

本系列文章主要学习抽象数据类型(Abstract Data Types)的基本知识和使用C++类层次(Class Hierarchy)来表示各种抽象数据类型。         本文主要介绍一些基本概...
  • Sagittarius_Warrior
  • Sagittarius_Warrior
  • 2016年02月16日 10:04
  • 597

数据结构和抽象数据类型

这两个概念,尤其是第一个都是特别抽象的概念,没什么具体可对应的实体可以给你举例,我就粘贴复制了,说说我的理解吧。数据结构呢,我们总是为了完成一个功能或者目的写程序,但不管什么程序、代码实际上都是一些指...
  • a54545400
  • a54545400
  • 2016年01月15日 16:41
  • 777

数据类型和抽象数据类型是如何定义的。二者有何相同和不同之处,抽象数据类型的主要特点是什么?使用抽象数据类型的主要好处是什么?

数据类型是程序设计语言中的一个概念,它是一个值的集合和操作的集合。如C语言中的整型、实型、字符型等。整型值的范围(对具体机器都应有整数范围),其操作有加、减、乘、除、求余等。实际上数据类型是厂家提供给...
  • jietian123
  • jietian123
  • 2007年03月09日 16:43
  • 4955

二叉树的抽象数据类型

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 2...
  • LUAOHAN
  • LUAOHAN
  • 2014年08月17日 18:34
  • 1764
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:抽象数据类型的表示与实现
举报原因:
原因补充:

(最多只允许输入30个字)