数据结构教程 第二课 抽象数据类型的表示与实现
来源:互联网 发布:牛当家皮带怎么样 知乎 编辑:程序博客网 时间:2024/04/29 02:34
本课主题: 抽象数据类型的表示与实现
教学目的: 了解抽象数据类型的定义、表示和实现方法
教学重点: 抽象数据类型表示法、类C语言语法
教学难点: 抽象数据类型表示法
授课内容:
一、抽象数据类型定义(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;...
6、循环语句 for(赋初值表达式;条件;修改表达式序列)语句;
case 条件n:语句序列n;break;
default:语句序列n+1;break;
}
while(条件)语句;
do{ 语句序列}while(条件); 7、结束语句return [表达式];
8、输入和输出语句 scanf([格式串],变量1,...,变量n); 9、注释 //文字序列 10、基本函数 max(表达式1,...,表达式n)
return; //函数结束语句
break; //case结束语句
exit(异常代码); //异常结束语句
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[i].name, L.stu[i].stuno, L.stu[i].age, L.stu[i].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语言实现
- 数据结构教程 第二课 抽象数据类型的表示与实现
- 数据结构--抽象数据类型(ADT)的表示与实现
- 数据结构(一) 抽象数据类型的表示与实现
- 抽象数据类型的表示与实现
- 抽象数据类型的表示与实现
- 抽象数据类型的表示与实现
- 抽象数据类型的表示与实现
- 抽象数据类型的表示与实现
- 抽象数据类型Triplet的表示与实现
- 1.3抽象数据类型的表示与实现
- 抽象数据类型的表示与实现
- 数据结构(严蔚敏)抽象数据类型Triplet的表示与实现(第一章)
- 数据结构(C语言版)第一章 抽象数据类型的表示与实现
- 数据结构(一) 抽象数据类型的表示与实现 代码示例
- 抽象数据类型的表示和实现方法
- 抽象数据类型Triplet的表示和实现
- 抽象数据类型Triplet的表示和实现
- 抽象数据类型Triplet的表示和实现
- C++中函数指针数组的妙用
- 还是写点好
- 关于文本框记忆的问题
- 大脑与意志(转贴)
- 表间关系和外键约束 SQL Server系列教程(七)
- 数据结构教程 第二课 抽象数据类型的表示与实现
- 采用ROM监控器的调试技巧分析-
- C#读取纯真IP数据库的代码&手机号码归属地查询代码C#实现
- Samsung ATM920T S3C2410x Initialization Code- -
- 毕业设计!!跪求!!题目是:THz波聚合物微结构在光纤中的模拟
- 深入理解C语言指针的奥秘
- 对硬盘知识追根到底
- 实现鼠标放到链接上(onmouseover)发出声音
- 通过php-java-bridge-4.0.8a_j2ee集成Java 6到PHP 5.2.1