`
lw9956164
  • 浏览: 27229 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
最近访客 更多访客>>
社区版块
存档分类
最新评论

数据结构学习连载(一)

阅读更多
数据结构教程 第一课 数据结构的基本概念和术语
本课主题:数据结构的基本概念和术语
教学目的:了解数据结构的基本概念,理解常用术语
教学重点:基本概念:数据与数据元素
教学难点:数据元素间的四种结构关系。
授课内容:
一、 数据、数据元素、数据对象、数据结构的定义
1、数据的定义:
定义一:数据是客观事务的表现。
学号 姓名 语文 数学 C语言
6201001 张三 85 54 92
6201002 李四 92 84 64
6201003 王五 87 74 73
6201004
...
例:张三的C语言考试成绩为92分,92就是该同学的成绩数据。
定义二:输入到计算机并能在计算机中处理的符号总称。
例:图像、声音等。
 
总结:现实世界信息的分析、复制、传播首先要符号化,这样才便于处理,尤其是便于计算机的处理。家长、社会要了解一个学生的学习成绩和能力,要看他的学习档案,而学习档案即是说明该学生学习情况的数据。
2、数据元素:
数据元素是数据的基本单位,它也可以由不可分割的数据项组成。

3.数据对象
性质相同的数据元素的集合。如上例:一个班级的成绩表可以看作一个数据对象。
4.数据结构
定义一:数据对象中各元素的关系
定义二:相互之间存在特殊关系的数据元素集合。

数据结构的种类:
特征 示例
集合 元素间为松散的关系
线性结构 元素间为严格的一对一关系 如上面的成绩表中各元素
树形结构 元素间为严格的一对多关系
图状结构(或网状结构) 元素间为多对多关系
数据结构的形式定义:
数据结构名称=(D,S)
其中D为数据元素的有限集,S是D上关系的有限集
逻辑结构 “数据结构”定义中的“关系”指数据间的逻辑关系,故也称数据结构为逻辑结构。
存储结构 数据结构在计算机中的表示称为物理结构。又称存储结构。
顺序存储结构
链式存储结构
存储结构详解:
计算机中存储信息的最小单位:位,8位为一字节,两个字节为一字,字节、字或更多的二进制位可称为位串。在逻辑描述中,把位串称为元素或结点。
当数据元素由若干数据项组成时,位串中对应于各个数据项的子位串称为数据域(Data Field)。
例:上述成绩表数据用C语言的结构体数组classonestu[50]来存储:
struct stu {
int stuno;/*数据项,也称stu位串中的一个子位串,或叫做数据域*/
char name[20];
int maths;
int language;
int c_language;
} classonestu[50];
二、数据类型
1、定义:数据类型是一个值的集合和定义在这个值集上的一组操作的总称。
例:C语言中的整型,其内涵为一定范围的自然数集合,及定义在该集合上的加减乘除及取模、比较大小操作。而实型则无取模操作。当然整型也不需四舍五入。
2、数据类型的种类:
特征 例
原子类型 值在逻辑上不可分解 int float
结构类型 值由若干成分按某种结构组成 struct stu
数据类型封装了数据存储与操作的具体细节。
三、总结
数据->数据元素
具有特定关系的数据元素集合->数据结构
数据结构的逻辑表示与物理存储->逻辑结构与存储结构
人们不仅关心数据的逻辑结构、存储结构,还关心数据的处理方法(算法)与处理结果->数据类型
数据类型->分类


数据结构教程 第二课 抽象数据类型的表示与实现
本课主题: 抽象数据类型的表示与实现
教学目的: 了解抽象数据类型的定义、表示和实现方法
教学重点: 抽象数据类型表示法、类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;
...
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[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语言实现


分享到:
评论

相关推荐

    罗斯文数据库学习连载

    在这个学习连载中,每份文档可能详细讲解了上述一个或多个知识点,逐步深入,帮助初学者建立起完整的罗斯文数据库知识体系。通过深入学习和实践,用户可以熟练地利用Access设计和管理自己的数据库应用。

    access罗斯文数据库学习连载

    - **数据分类**:将相关的数据归类到同一个表中,确保数据的一致性和完整性。 - **避免冗余**:通过细分数据,减少重复记录,提高数据质量。 罗斯文数据库包含以下主要表: - **客户表**:记录客户的详细信息,如...

    流光网络小说连载系统 v1.0-ASP源码.zip

    对于想要学习ASP或者构建类似网络小说连载系统的开发者来说,这是一个很好的实践项目。通过分析和修改这个源码,可以深入了解ASP的语法和Web应用开发流程,同时也能积累服务器端脚本的实践经验。不过,考虑到ASP的...

    利用spc3开发智能从站源码讲解(连载一)

    提供的"利用spc3开发智能从站源码讲解(连载一).pdf"文档应该会详细解释这些概念,并给出实例代码供读者参考。在学习过程中,建议动手实践,模拟不同的通信场景,通过调试和测试来加深理解。同时,结合相关的技术...

    基于PHP的小说连载系统.zip

    【标题】:“基于PHP的小说连载系统” 这个项目标题揭示了我们要讨论的核心——一个使用PHP编程...对于学习者来说,这是一个很好的实践项目,可以帮助他们提升PHP Web开发技能,并理解如何构建一个完整的在线应用。

    ExtJS+2.2实现及应用连载.rar

    ExtJS是一种基于JavaScript的开源富客户端框架,专用于构建交互式、数据驱动的Web应用程序。在2.2版本中,ExtJS提供了丰富的组件库、强大的数据管理机制以及优雅的用户界面设计,使得开发者能够轻松创建复杂的桌面级...

    连载:徒手写一个DICOM阅图软件(002)

    DICOM文件由一系列的数据元素(Data Elements)组成,这些元素包含了元数据(如病人信息、设备信息)以及图像数据。每个数据元素都有一个唯一的标识符(Tag)和一个值。读取DICOM文件时,我们需要解析这些数据元素,...

    Sparrow OS 设计文档连载十:Interrupt Handling

    在Sparrow OS设计文档连载十中,详细探讨了...这些设计要点对于开发高性能的嵌入式系统至关重要,对于学习和了解嵌入式操作系统中断处理的开发者来说,Sparrow OS设计文档的连载系列无疑提供了一个宝贵的学习资源。

    C语言教程第一章(有连载)

    2. **丰富的运算符和数据类型**:C语言提供了多种运算符和数据类型,支持复杂的数值计算和数据结构实现。 3. **直接内存访问**:C语言允许直接访问内存地址,进行位级操作,提供了高级和低级编程的结合。 4. **高效...

    连载:徒手写一个DICOM阅图软件(001)

    在后续的教程中,我们将逐渐引入DICOM支持,这涉及到理解DICOM协议和数据结构。DICOM是一种医疗影像交换标准,用于存储、传输和打印医学图像。它包含了元数据如患者信息、扫描参数等,以及图像数据本身。为了读取和...

    PHP实例开发源码-杰奇php小说连载系统.zip

    6. 小说分类与标签:分类和标签有助于用户快速找到感兴趣的小说,因此系统会涉及分类管理及标签云的实现,这与PHP的数据结构和算法相关。 7. 用户互动:评论、评分、收藏等互动功能可以提升用户体验。通过分析源码...

    【连载】深度学习笔记10:三维卷积、池化与全连接.pdf

    三维卷积允许模型理解多通道图像的复杂结构,三维池化降低数据维度,而全连接层则将低维度特征转换为预测输出。在实际应用中,这些技术广泛应用于医疗成像分析、视频理解等需要处理三维数据的领域。通过深入理解和...

    flex 实例连载 air 全面

    在Flex中设计数据库时,需明确数据模型,合理规划表结构,确保数据的正常存储和检索。 五、性能优化 1. 使用合适的索引:为频繁查询的字段创建索引,提高查询速度。 2. 事务批量操作:尽量减少单次数据库操作,通过...

    [原创+连载]一步一步做拼图游戏,C++版(五)当前代码

    【标题】:“[原创+连载]一步一步做拼图游戏,C++版(五)当前代码”涉及的知识点主要集中在C++编程语言上,尤其是游戏开发的初级阶段,它包括了基本的程序设计、数据结构、算法应用等多个方面。在本教程中,作者将...

    HTML详解连载(1)

    HTML,全称HyperText Markup Language,是一种用于创建网页的标准标记语言。它构成了互联网上大部分页面的基础,让...通过持续学习和实践,你将逐渐成为一名熟练的前端开发者,有能力创建功能丰富的、吸引用户的网页。

    杨中科微软面试全程分享(连载打包).

    1. 技术面试:微软的技术面试通常会考察候选人对计算机科学基础的理解,如数据结构、算法、操作系统、网络等。杨中科可能会分享他在面试中遇到的具体问题,以及如何解答的经验,这对于准备面试的人来说是非常宝贵的...

    基于PHP的读怪小说连载系统源码.zip

    这个系统可能采用了MVC(Model-View-Controller)架构模式,这是一种常用的设计模式,用于分离业务逻辑、数据模型和用户界面,使代码更易于维护和扩展。 【标签】"php" 明确了技术焦点,PHP是此项目的核心,它的...

    PHP实例开发源码-php读怪小说连载系统.zip

    4. **数据分页**:由于小说连载可能有大量章节,数据分页是必不可少的,PHP可以结合SQL的LIMIT和OFFSET关键字实现这一功能。 5. **模板引擎**:为了方便页面布局和样式,项目可能使用了如Twig或Smarty这样的模板...

    PHP实例开发源码—php小说连载系统.zip

    学习这个实例,你可以掌握PHP的基础语法,包括变量、数据类型、控制结构(如if...else,switch,for,while)、函数、类和对象等。 2. **MVC架构**:常见的PHP开发框架采用Model-View-Controller(模型-视图-控制器...

Global site tag (gtag.js) - Google Analytics