第一章  绪论
This presentation is the property of its rightful owner.
Sponsored Links
1 / 55

第一章 绪论 PowerPoint PPT Presentation


  • 73 Views
  • Uploaded on
  • Presentation posted in: General

第一章 绪论. 掌握常用数据结构的二元组表示 掌握抽象数据类型定义、算法特性及其描述方法 掌握评价算法的规则,算法的时间复杂度、空间复杂度的定义和表示。. 1.1 数据结构的概念与分类. 数据 ( data ). 数据 是信息的载体,是描述客观事物的数、字符、以及所有能输入到计算机中,被计算机程序识别和处理的符号的集合。 数值性数据 非数值性数据. 在实际中,按数据性质归类到不同的称之为 数据对象 的集合中。 数据元素 (data element) : 数据对象中的具有相同性质的数据成员:例如文件中的记录、字符串中的字符、数组中的每个数值等。

Download Presentation

第一章 绪论

An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -

Presentation Transcript


4615023

第一章 绪论

  • 掌握常用数据结构的二元组表示

  • 掌握抽象数据类型定义、算法特性及其描述方法

  • 掌握评价算法的规则,算法的时间复杂度、空间复杂度的定义和表示。


4615023

1.1 数据结构的概念与分类

数据(data)

  • 数据是信息的载体,是描述客观事物的数、字符、以及所有能输入到计算机中,被计算机程序识别和处理的符号的集合。

  • 数值性数据

  • 非数值性数据


4615023

在实际中,按数据性质归类到不同的称之为数据对象的集合中。

  • 数据元素(data element):数据对象中的具有相同性质的数据成员:例如文件中的记录、字符串中的字符、数组中的每个数值等。

  • 例如:整数数据对象

    N = { 0, 1, 2, … }

    学生记录数据对象


4615023

  • 数据记录(Data Record):数据组织的基本单位,记录由若干个数据项组成。

    例如:学生记录数据对象

    见下列“学生”表格和“课程”表格


4615023

“学生”表格


4615023

“课程”表格


4615023

  • 数据结构(Data Structure):数据及其之间的相互关系:

  • 逻辑结构—数据结构

  • 物理结构—存储结构


4615023

学生选课系统中实体构成的网状关系

课程

(课程号,课程名,性别,籍贯)

学生

(学号,姓名,性别,籍贯)

选课

(学号,姓名,课程号,成绩)


4615023

什么是数据结构?

  • 数据结构----数据 + 结构:一般来说,一个数据对象中的所有成员之间均存在着一定的联系(某种关系),这种关系称为数据结构。

  • 从不同的视点考虑,数据结构分为:

    • ---逻辑结构(数据结构)

    • ---物理结构


4615023

数据结构表示方法

二元组表示 Data_Structure={ D, R }

D是某一数据对象,R是该对象中所有数据成员之间的关系的有限集合。

D={ki | 1≤i≤n, n≥0}

R={<ku,kv> | ku,kv∈D}


4615023

数据结构表示方法(续1)

K上的关系R是序偶的集合,对于R中的任一序偶<x,y>,x,y∈D, x称为序偶的第一个元素,y称为序偶的第二个元素。也称x是y的直接前驱,y是x的直接后继。


4615023

数据结构表示方法(续2)

数据结构的图形表示法,示意图中的每一个结点(顶点)对应着一个元素,两结点之间的连线(有向弧或无向弧)对应关系中的一个序偶。Ku是Kv的前驱,Kv是Ku的后继。

Kv

Ku

Ku

Kv


4615023

线性1:1

树1:n

图m:n

集合

数据结构分类

线性结构、非线性结构

1

1

2

3

4

5

6

2

3

4

5

6


4615023

1

2

3

4

5

6

7

数据结构举例

例1:list={ D, R }

其中:D={ 1,2,3,4,5,6,7 }

R={ <1,2>, <2,3>, <3,4>, <4,5>, <5,6>, 6,7> }

数据的线性结构示意图1:1


4615023

数据的树型结构示意图1:n, n≥1

数据结构举例(续1)

例2:tree={ D, R }

其中:D={ 1, 2, 3, 4, 5, 6 }

R={ <1,2>,<1,3> ,<2,4>,<2,5>,<3,6>}

1

R中各个对象为层次关系(多个后继)

2

3

4

5

6


4615023

数据的图型结构示意图m:n

数据结构举例(续2)

例3:graph={ D, R }

其中:D={ 1,2,3,4,5,6,7 } R={ (1,2),(1,5) ,(2,3),(2,4),(2,6),(3,4),(3,6),

(3,7),(4,7),(5,6),(6,7)}

4

1

2

每个结点有多个前驱和多个后继

5

3

7

6


4615023

集合结构示意

数据结构举例(续3)

例4:set={ D, R }

其中:D={ 1,2,3,4,5,6,7 }

R={ }

D中的结点之间没有直接联系


4615023

数据类型

数据类型是对数据的取值(范围)、结构和允许的操作的描述。例如整型、实型、字符型、布尔型、数组、指针、结构、文件等。


4615023

数据的物理结构

数据逻辑结构的存储映像:

顺序、链接、散列、索引

数据的逻辑结构是面向问题的

数据的物理结构是面向计算机的


4615023

1.2 抽象数据类型及面向对象概念

一、 数据类型

1、定义:数据类型是对数据的取值(范围)、结构和允许的操作的描述。例如整型、实型、字符型、布尔型、数组、指针、结构、文件等。

2、分类:简单类型: 简单数据都是无法再分的整体,复合类型:如数组、记录、字符串、结构等。


4615023

1.2 抽象数据类型及面向对象概念(续1)

二、抽象数据类型(ADTs)

1、概念:由一组数据结构和在该组数据结构上的一组操作组成,

  • 一般数据类型由具体语言系统内部定义,直接提供给编程者定义用户数据,称为预定义数据类型。


4615023

1.2 抽象数据类型及面向对象概念(续2)

  • 抽象数据类型由编程者定义(数据及操作),不管其数据存储结构及操作具体实现。


4615023

1.2 抽象数据类型及面向对象概念(续2)

2、定义

ADT 抽象数据类型名 is

objects: 数据描述

function: 操作声明

end 抽象数据类型名


4615023

抽象数据类型举例

ADTNaturalNumber is

Objects: 一个整数的有序子集合,它开始于0,结束

于机器能表示的最大整数(MaxInt)。

Function:对于所有的 x, y  NaturalNumber;

False, True  Boolean, +、-、<、==、

=等都是可用的服务。

Zero( ) :NaturalNumber //返回自然数0


4615023

抽象数据类型举例(续1)

IsZero(x) : if (x==0) 返回True

Booleanelse 返回False

Add (x, y) : if (x+y<=MaxInt)返回 x+y

NaturalNumberelse 返回MaxInt

Subtract (x, y) : if (x < y) 返回 0

NaturalNumberelse 返回 x - y


4615023

抽象数据类型举例(续2)

Equal (x, y) : if (x==y) 返回True

Booleanelse 返回 False

Successor (x) : if (x==MaxInt) 返回 x

NaturalNumber else 返回 x+1

endNaturalNumber


4615023

抽象数据类型实现

3、实现:抽象数据类型在C++语言中 是通过类类型来描述。

只允许该类及其

子类直接使用

class 抽象数据类型名{

private: 数据说明部分

public: 操作(函数声明)

};

供该类、子类及外部操作使用。操作的具体实现通常在单独的文件中


4615023

抽象数据类型实现举例

例:设计矩形的一种抽象数据类型,其数据部分包括其长度与宽度,操作部分包括初始化、求周长和面积。


4615023

抽象数据类型实现举例(续)

class rectangle {

private:

float length,width;

public:

rectangle( ); //构造函数

~rectangle( ); //析造函数

float getl( );

float getw( );

float circumference(rectangle r);

float area(rectangle r);

};

数据结构:数据说明

数据操作:函数


4615023

抽象数据类型特征

抽象数据类型的特征是使用与实现分离,实行封装和信息隐蔽。


4615023

小结 为什么要学习数据结构?

  • 它研究了计算机需要处理的数据对象和对象之间的关系。

  • 它刻画了实际应用中涉及到的数据的逻辑组织。

  • 它描述了数据在计算机中如何存储、传送、转换。


4615023

主要讨论哪几种数据结构?

  • 从传统的观点来看

    • 数据的逻辑结构

      • 线性结构

      • 非线性结构


4615023

线性结构

A

B

C

D

E

F

非线性结构

A

A

D

B

C

C

D

E

G

B

E


4615023

学习数据结构需要注意些什么?

1、知识方面

  • 系统掌握基本数据结构的特点及其不同实现。

  • 了解并掌握各种数据结构上主要操作的实现及其性能(时间、空间)的分析。


4615023

学习数据结构需要注意些什么?(续)

2、技能方面

  • 掌握各种数据结构的使用特性,在算法设计中能够进行选择。

  • 掌握常用的递归、回溯、迭代、递推等方法的设计

  • 掌握自顶向下、逐步求精的程序设计方法。


4615023

1.3 算法描述

算法特征;输入、输出、确定、有效、有穷。

例如:选择排序问题到算法的转换。

首先:要解决的问题是:将一组无序数据重新排列成有序的数据(假设由大到小)。

其次,解决方案:假设有N数据,存于数组a[0]到a[n-1]中;

第0步,从a[0]~a[n-1]这n个数中找出最大数,存于a[0];


4615023

第1步,从a[1]~a[n-1]这n-1个数中找出最大数,存于a[1],第2步,从a[2]~a[n-1]这n-2个数中找出最大数,存于a[2],

依次类推,直到从a[n-2]~a[n-1]这2个数中找出最大数,存于a[n-2],剩余的一个数不必处理。这样,n个数据就按照由大到小的顺序排列出来。

上面的步数m=0,1,2,……,n-2,每步找出的最大数存于a[m]位置上。


4615023

每次求最大数的方法:先假设a[m]是最大数,从a[m+1]~a[n-1]这几个数据与a[m]比较,大于a[m]者保存其下标k,所有数据比较完以后,a[m]与a[k]交换。


4615023

void SelectSort(int a[ ], const int n) //选择排序法

{ for ( int m=0; m<n-1; m++) //1、第m步处理m=0~n-1

{ k=m; //2、找出a[m]~a[n-1]中的最大数

for ( j=m+1; j<n; j++)

if ( a[j] > a[k] ) k=j;

int temp=a[m]; //3、将其存入a[m]

a[m]=a[k];

a[k]=temp;

}

}


4615023

算法描述方法

文字描述

流程图

程序设计语言


4615023

算法评价

正确性:正确

健壮性:合理性

可读性:易读

时间复杂度(计算复杂度):是在计算机上开始到结束运行时间的相对度量,约等于计算机执行一种简单操作所用时间t0与算法中执行简单操作的次数n的乘积,而t0因机器而异。所以用n的函数衡量时间复杂度。


4615023

一般情况下,计算f(n)较复杂,也没有必要,只须大致计算出相应的数量级(Order)。

O(f(n)):O(n), O(n2), O(log2n), O(n*log2n), …

空间复杂度:

运行过程中临时占用存储空间大小


4615023

包含文件语句

  • #include <iostream.h>

  • cin / cout / >> / <<

  • #include <stdlib.h>

  • exit(), rand()—随机数, srand()--随机数种子

  • #include <fstream.h> //文件I/O/IO

  • ifstream / ostream / fstreamt

  • #include <string.h> 字符串操作函数


4615023

函数

  • C++程序---由相对独立的函数组成;

  • C++函数—main(),程序执行从main()考试;

  • 一般函数—由用户根据实际需要定义;

  • main()函数,可以调用一般函数,其它函数

  • 可以相互调用(含递归调用)。

  • 函数调用方式:函数调用语句,表达式调用

  • 函数参数:值形式参数/引用形式参数


4615023

#include <iostream.h>

#include <string.h>

#include <stdlib.h>

const int PN=5;

struct pupil {

char pnum[80];

int grade;

};


4615023

int find (pupil b[], int n,char *k);

pupil *find(int n, pupil b[], char *k);

pupil & find(char *k, pupil b[], int n);

void main()

{pupil a[PN]={ {"11111", 81},

{"22222", 82},

{"33333", 83},

{"44444", 84},

{"55555", 85}};


4615023

int i;

for(i=0; i<PN; i++) {

cout<<a[i].pnum<<"<<a[i].grade;

cout<<endl<<endl;

}

pupil x={"33333", 100};

cout<<"请选择(1/2/3)?";

cin>>i;

switch(i){


4615023

case 1:

i=find(a,PN,x.pnum);

if (i<PN) {

a[i]=x;

cout<<"查找到记录x!"<<endl;

}

else

cout<<x.pnum<<" not found!"<<endl;

break;


4615023

case 2:

pupil *p;

p=find(PN,a,x.pnum); //查找x.pnum,

if(p!=NULL)

*p=x; //用x替换a元素

else

cout<<x.pnum<<" not found!"<<endl;

break;


4615023

case 3:

{ pupil y; //注意此时函数find的返回类型。

y=find(x.pnum, a, PN);

cout<<y.pnum;

cout<<find(x.pnum, a, PN).pnum;

cout<<" 已经找到!"<<endl;

};

for(i=0; i<PN; i++){

cout<<a[i].pnum<<" "<<a[i].grade;

cout<<endl<<endl; }

}


4615023

int find (pupil b[], int n, char *k)

{

for(int i=0; i<n; i++)

if(strcmp(b[i].pnum, k)==0)

return i;

return i;

}


4615023

pupil * find(int n, pupil b[], char *k)

{ //查找k,返回k的地址

for(int i=0; i<n; i++)

if(strcmp(b[i].pnum,k)==0)

return &b[i];

return NULL;

}


4615023

pupil & find(char *k, pupil b[], int n)

{//返回一个pupil结构类型的变量

for(int i=0; i<n; i++)

if(strcmp(b[i].pnum,k)==0)

return b[i];

cerr<<k<<" not found"<<endl;

exit(1);

}


4615023

本章小结

  • 数据结构:

    逻辑结构—线性结构、树结构、图结构和集

    合结构。

    物理结构—顺序结构、连接结构、索引结构

    和散列结构。

  • 抽象数据类型—数据和对数据的操作,用类

    来实现。

  • 算法的评价、算法的时间复杂度


  • Login