`
韩悠悠
  • 浏览: 840645 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

数据结构1

    博客分类:
  • java
 
阅读更多

,1、数据结果讨论的范畴

算法+数据结构=程序

程序设计:为计算机处理问题编制一组指令集。

例如:数值计算的程序问题

结构静力分析计算--------线性代数方程组

全球天气预报----------环流模式方程

 

非数值计算的方程设计问题

例:求一组(n个)整数中的最大值

算法:?基本操作是“比较俩个数的大小”

模型:?

 

例二:计算机对弈

算法:对弈的规则和策略

模型:?棋盘,旗子的表示

 

例三:足协的数据库管理

算法?需要管理的项目?如何管理?用户界面?

模型:?各种各样的表格和数据库。

 

概况地说

        数据结构描述实现世界实体的数学模型(非数值计算)及其上的操作在计算机中的实现。

2、基本概念

 

一、数据与数据结构

数据:所有能被输入到计算机中,且被计算机处理的符号的集合计算机操作的对象的总称。

是计算机处理的信息的某种特定的符号表示形式。

 

数据元素:

数值中的一个“个体”,数据结构中讨论的基本单位。但不是最小单位。

数据项:数据结构中讨论的最小单位,

数据元素是数据项的集合。

例如:运动员(数据元素)

姓名-俱乐部名称-出生日期(--日【组合项】)-参加日期-职位-业绩

 

数据结构:带结构的数据元素的集合。

 

例如:一个含12位数的十进制可以用三个4位的十进制数表示

3214,6587,9345=====a1(3214),a2(6587),a3(9345)

a1,a2a3之间存在“次序”关系

<a1,a2>,<a2,a3>

 

 

 

例子:23列的二维数组(a1,a2,a3,a4,a5,a6)

A1

A2

A3

A4

A5

A6

行的次序关系:

Row={<a1,a2>,<a2,a3>,<a4,a5>,<a5,a6>}

列的次序关系

Row={<a1,a4>,<a2,a5>,<a3,a6>}

 

数据的逻辑结构可归结为以下四类

线性结构、树形结构、图状结构和集合结构

 

数据结构的形式定义为:

数据结构是一个二元组

Data_Structures=(D,S);

其中:D是数据元素的有限集,SD上关系的有限集。

 

数据的存储结构

逻辑结构在存储器中的映像

 

数据元素的映像方法:

用二进制位(bit)的位串表示数据元素

 

关系的映像方法:(表示<x,y>的方法)

 

顺序映像

         以存储位置的相邻表示后继关系y的存储位置和x的存储位置之间的一个常量C

         C是一个隐含值,整个存储结构中只含数据元素本身的信息

 

x

y

 

 

链式映像

         以附加信息(指针)表示后继关系

需要用一个和X在一起的附加信息指示Y的存储位置

 

在不同的编程环境中,存储结构可有不同的描述方法

 

抽象数据类型(Abstract Data Type 简称ADT)

是指一个数学模型以及定义在此数学模型上的一组操作

 

 

ADT有俩个重要特征

         数据抽象

ADT描述程序处理的实体时,强调的是其本质的特征,其所能完成的功能以及它和外部用户的接口(即外界使用它的方法)

数据封装

将实体的外部特征和其内部实现细节分离,并且对外部用户隐藏其内部实现细节

 

抽象数据类型的描述方法

 

抽象数据类型可用(D,S,P)三元组表示

其中,D是数据对象

      SD上的关系集

      P是对D的基本操作集

 

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

抽象数据类型需要用固有数据类型(高级编程语言中已实现的数据类型)来实现

 

3、算法和量度

 

1,算法

算法是为了解决某类问题而规定的一个有限长的操作序列,一个算法必须满足以下五个重要特征:

1有穷性

对于任意一组合法输入值,在执行有穷步骤之后一定能结束,即:算法中的每个步骤都能在有限时间内完成。

2确定性

对于每种情况下所应执行的操作,在算法中都有确切的规定,使算法在执行者或阅读者都能明确其含义及如何执行,并且在任何条件下,算法都只有一条执行路径。

3可行性

算法中的所有操作必须足够基本,都可以通过已经实现的基本操作运算有限次实现之。

4有输入

作为算法加工对象的量值,通常提现为算法中的一组变量,有些输入量需要在算法执行过程中输入,而有的算法表面上可以没有输入,实际上已被嵌入算法之中

5有输出

它是一组与“输入”与确定关系的量值,是算法进行加工得到的结果。

 

二,算法设计的原则

设计算法时,通常应考虑达到以下目标:

1、正确性

2、可读性

3、健壮性

4、高效率与地存储量需求

 

 

 

1、正确性

首先,算法应当满足以特定的“规格说明”方式给出的需求。

其次,对算法是否“正确”的理解可以有以下四个层次:

a、程序中不含语法错误

b、程序对于几组输入数据能够得出满足要求的结果;

c程序对于精心选择的、典型、苛刻切带有刁难性的几组输入数据能够得出满足要求的结果;

d、程序对于一切合法的输入数据都能得出满足要求的结果;

 

2、可读性

算法主要是为了人的阅读与交流,其次才是为计算机执行,因此算法应该易于人的理解

 

3、健壮性

当输入的数据非法时,算法应当恰当地做出反映或进行相应处理,而不是莫名其妙的输出结果,并且,处理出错的方法不应是中断程序的执行,而应返回一个表示措辞或者错误性质的值。以便在更高的抽象层面处理

 

4、高效率与地存储量需求

通常,效率值得算法执行时间,存储量指的算法执行过程中所需要的最大存储空间,俩者都与问题的规模有关。

 

 

三、算法效率的衡量方法和准则

通长有俩种衡量算法效率的方法

事后统计法

缺点:1、必须执行程序

      2、其他因素掩盖算法的本质

事前分析估算法

 

和算法执行时间相关的因素:

1、算法选用的策略

2、问题的规模

3、编写程序的语音

4、编译程序产生的机器代码的质量

5、计算机执行指令的速度

 

一个特定算法的“运行工作量”的大小,只依赖于问题的规模(通常用整数量n表示),或者说,它是问题规模的函数。

 

假如,随着问题规模N的增长,算法执行时间的增长率和f(n)的增长率相同,则可记住作:

T(n)=O(f(n))

T(n)为算法的(渐进)时间复杂度

算法=控制结构+原操作(固有数据类型的操作)

算法的执行时间=

原操作(i)的执行次数*原操作(i)的执行时间

 

算法的执行时间与原操作执行次数之和成正比

 

从算法中选取一种对于所研究的问题来说是基本操作的原操作,以该基本操作在算法中重复执行的次数作为算法运行时间的衡量准则

 

例一,矩阵相乘

for(i=;i<=n;++i){

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

                   c[i,j]=0;

                   for(k=1;k<=n;++k)

                            c[i,j]+=a[i,k]*b[k,j];

         }

}

基本操作:乘法操作


<!--[if gte msEquation 12]><m:oMath><m:sSup><m:sSupPr><span style='font-family:"Cambria Math","serif";mso-ascii-font-family:"Cambria Math"; mso-hansi-font-family:"Cambria Math"'><m:ctrlPr></m:ctrlPr></span></m:sSupPr><m:e><span style='font-family:宋体;mso-ascii-font-family:"Cambria Math";mso-fareast-font-family: 宋体;mso-fareast-theme-font:minor-fareast;mso-hansi-font-family:"Cambria Math"'><m:r><m:rPr><m:scr m:val="roman"/><m:sty m:val="p"/></m:rPr>时间复杂度</m:r></span><span lang=EN-US style='font-family:"Cambria Math","serif"'><m:r><m:rPr><m:scr m:val="roman"/><m:sty m:val="p"/></m:rPr>:O(</m:r><m:r><i style='mso-bidi-font-style:normal'>n</i></m:r></span></m:e><m:sup><i style='mso-bidi-font-style:normal'><span lang=EN-US style='font-family:"Cambria Math","serif"'><m:r>3</m:r></span></i></m:sup></m:sSup></m:oMath><![endif]--><!--[if !msEquation]--><!--[if gte vml 1]><v:shapetype id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t" path="m@4@5l@4@11@9@11@9@5xe" filled="f" stroked="f"> <v:stroke joinstyle="miter"/> <v:formulas> <v:f eqn="if lineDrawn pixelLineWidth 0"/> <v:f eqn="sum @0 1 0"/> <v:f eqn="sum 0 0 @1"/> <v:f eqn="prod @2 1 2"/> <v:f eqn="prod @3 21600 pixelWidth"/> <v:f eqn="prod @3 21600 pixelHeight"/> <v:f eqn="sum @0 0 1"/> <v:f eqn="prod @6 1 2"/> <v:f eqn="prod @7 21600 pixelWidth"/> <v:f eqn="sum @8 21600 0"/> <v:f eqn="prod @7 21600 pixelHeight"/> <v:f eqn="sum @10 21600 0"/> </v:formulas> <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/> <o:lock v:ext="edit" aspectratio="t"/> </v:shapetype><v:shape id="_x0000_i1025" type="#_x0000_t75" style='width:79.5pt; height:15.75pt'> <v:imagedata src="file:///C:\Users\lenovo\AppData\Local\Temp\msohtmlclip1\01\clip_image001.png" o:title="" chromakey="white"/> </v:shape><![endif]--><!--[if !vml]--><!--[endif]--><!--[endif]-->)

 

例二、选择排序

 

public void select_sort(int[] a){

         for(int i=0;i<a.length-1;i++){

                   int j=i;//假定第一个是最小的

                   for(int k=i+1;k<a.length;k++){

                            //如果当前元素比J

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

                            //如果当前的值不是假定的最小值

                            if(j!=i){

                                     int x=a[i];

                                     a[i]=a[j];

                                     a[j]=x;

                            }

                   }

         }

}

 

基本操作:比较(数据元素)操作

 

 

 

 

 

 

 

 

 

 

例三,冒泡排序

public void bubble_sort(int[] a){

         for(int i=a.length-1,change=ture;i>1&&change;i--){

                   change=false;

                   for(int j=0;j<i;j++){

                            if(a[j]>a[j+1]){

                                     int x=a[j];

                                     a[j]=a[j+1];

                                     a[j+1]=x;

                                     change=true;

                            }

                   }

         }

}

 

 

分享到:
评论

相关推荐

    数据结构1(上机).c

    数据结构1(上机).c

    数据结构1-8章在线测试.docx

    数据结构1-8章在线测试.docx

    程序设计与数据结构

    1. **线性结构**:包括数组、链表、栈和队列等基本线性结构,通过这些数据结构可以高效地组织和管理数据。 - **数组**:数组是一种简单的线性表,其中的数据元素具有相同的数据类型,并且可以通过下标访问。 - **...

    数据结构 数据结构 数据结构 数据结构 数据结构

    1. **数组**:数组是最基础的数据结构,它将一组相同类型的元素存储在一个连续的内存空间中。通过索引可以快速访问任意位置的元素,但插入和删除操作相对较慢,因为可能需要移动大量元素。 2. **链表**:链表是一种...

    双向链表 - 数据结构与算法 C 请看!

    双向链表 - 数据结构与算法 C 双向链表 - 数据结构与算法 C 。。。。。。

    数据结构教程.docx

    数据结构教程主要涵盖数据、数据元素、数据对象以及数据结构的定义与分类,同时详细介绍各类数据结构的特性、操作和应用场景。以下是一个概括性的数据结构教程内容: 一、数据结构的定义与分类 1. 数据的定义 数据...

    上海交大数据结构课件 上海交大数据结构课件

    数据结构是计算机科学中的核心课程之一,主要研究如何在计算机中高效地组织和存储数据,以便于进行各种操作。上海交通大学的数据结构课件是学习这一主题的重要资源,它涵盖了广泛的知识点,帮助学生深入理解数据结构...

    严蔚敏数据结构动态演示

    1. 如何在内存中构建和操作这些数据结构。 2. 各种操作(如插入、删除、查找)的时间复杂度和空间复杂度,理解它们对性能的影响。 3. 不同数据结构在解决实际问题时的适用性,如搜索、排序、存储等。 4. 算法的执行...

    数据结构学习笔记.doc

    1. 查找:查找是指在数据结构中找到某个特定的数据元素的过程。 2. 排序:排序是指将数据元素按照一定的顺序排列的过程。 六、如何更好的编程 1. 编写代码量较多,多动手写。 2. 系统性的编程,了解数据结构和...

    数据结构的pdf课件

    1. **基本概念**:首先会介绍数据结构的基本概念,包括什么是数据结构,数据结构的重要性,以及数据结构与算法的关系。数据结构是存储和组织数据的方式,如数组、链表、栈、队列等,而算法则是操作这些数据结构的...

    数据结构1

    数据结构第一章绪论-C++111111111157IP

    西安理工大学863数据结构真题 -西安理工大学863数据结构真题需要的滴滴我,都是我去年备考时的真题资料,还有复试资料哦~

    西安理工大学863数据结构真题集锦 作为一名 IT 行业大师,我将根据提供的文件信息,生成相关的知识点,以下是详细的输出结果: 一、数据结构概述 数据结构是计算机科学中的一门基础学科,旨在研究如何存储和组织...

    数据结构1800试题.pdf

    数据结构是计算机科学中的核心课程,它探讨如何高效地组织和管理数据,以便进行快速查找、插入和删除等操作。这份“数据结构1800试题”提供了丰富的练习题目,涵盖了数据结构的主要概念和算法,适合学生进行复习和...

    李春葆数据结构源代码

    1. **理解基本操作**:通过阅读和运行代码,你可以了解每种数据结构的基本操作,如插入、删除、查找等是如何执行的。 2. **分析时间复杂度**:源代码能帮助你分析算法的时间复杂度,理解为何某些操作比其他操作更...

    往年数据结构考题和答案

    最后,"数据结构试题及答案1.pdf"可能是一个综合性的资料,不仅包含试题和答案,还可能包括了相关的知识点总结、例题解析或者是数据结构应用的案例。这样的文档通常会对重要的数据结构概念进行详细阐述,比如抽象...

    《初识数据结构》教学建议.pdf

    1. 精选典型的精巧案例,由浅入深地讲解概念,并举一反三,让学生体会到相同数据对象下不同数据结构的含义。 2. 在教学过程中,注意将理论与实践相结合,利用存储单元将常见数据结构进行讲解。 3. 明确不同的数据...

    浙江大学陈越数据结构课件

    1. **基本概念**:首先,我们需要了解数据结构的基本术语,如数组、链表、栈、队列、树和图等。这些都是构建复杂算法的基础。 2. **线性结构**:数组和链表是最基础的数据结构,它们用于存储顺序数据。数组提供了...

    数据结构(唐发根)

    1. **基本概念**:首先,你需要理解什么是数据结构。数据结构是数据的组织形式,它不仅包含数据本身,还包括数据之间的关系。常见的数据结构有数组、链表、栈、队列、树、图等。 2. **线性结构**:数组和链表是两种...

    Java常见数据结构面试题(带答案)

    "Java常见数据结构面试题(带答案)" 以下是对Java常见数据结构面试题的知识点总结: 栈和队列 * 栈和队列的共同特点是只允许在端点处插入和删除元素。 * 栈通常采用的两种存储结构是线性存储结构和链表存储结构...

    王红梅数据结构答案.pdf

    1. 数据元素和数据结构 数据元素是数据的基本单位,在计算机程序中通常作为一个整体进行考虑和处理。数据项是数据的最小单位,讨论数据结构时涉及的最小数据单位。数据结构指的是数据元素以及数据元素之间的关系。 ...

Global site tag (gtag.js) - Google Analytics