数据结构和算法 Data Structures and Algorithms

程序=数据结构+算法

Program equals data structure plus algorithm

一.基本概念

Basic conceptiom

数据元素(元素/记录/结点/顶点)Data elements

(elements/records/nodes/vertices)

数据数据元素(组成数据的基本单位)>数据项(构成数据元素的不可分割的最小单位)
如:学生表>个人记录>学号、姓名

数据对象:性质相同的数据元素的集合,是数据的子集

结构:数据元素相互之间的关系Structure: The relationship between data elements

110acad51883459b99370467922e1f9d.jpg

09bdaa5f68ac40a9804910be9bb667eb.png

逻辑结构的种类

Types of logical structures

划分方式一:

(1)线性结构:线性表,栈,队列,串

Linear structure: linear table, stack, queue, string

(2)非线性结构:树,图

Nonlinear structures: Trees, graphs

划分方式二:四类基本逻辑结构:

(1)集合结构

Set structure

(2)线性结构(一对一)

Linear structure (one-to-one)

(3)树形结构(一对多)

Tree structure (one-to-many)

(4)图状结构/网状结构

Graph structure/network structure

 

存储结构的种类

(1)顺序存储结构

Sequential storage structure

(2)链式存储结构

Chain storage structure

(3)索引存储结构

Indexed storage structure

(4)散列存储结构

Hash storage structure

 

(1)顺序存储结构:用一组连续的存储单元依次存储数据元素,元素之间的逻辑关系由存储位置来表示。C语言中用数组来实现顺序存储结构。

(2)链式存储结构:用一组任意的存储单元存储数据元素,元素之间的逻辑关系由指针来表示。C语言中用指针来实现顺序存储结构。

(3)索引存储结构:在存储数据元素信息的同时,还建立附加的索引表索引项:(关键字,地址) 。稠密索引Dense Index;稀疏索引Sparse Index。

(4)散列存储结构:根据数据元素的关键字直接计算出存储地址。

 

数据类型和抽象数据类型

Data types and abstract data types

高级语言(如C语言)的数据类型明显的或隐含的规定了在程序在程序执行期间变量和常量的所有可能取值范围,以及所允许进行的操作

数据类型Data Type:一组性质相同的值的集合以及定义于这个值集合上的一组操作的总称。

数据类型=值的集合+值集合上的一组操作

抽象数据类型Abstract Data Type,ADT:一个数学模型(逻辑结构)以及定义在此数学模型上的一组操作(抽象运算)。不考虑计算机内的具体存储结构与运算的具体实现算法。

抽象数据类型的形式定义:(D,S,P)

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

抽象数据类型的定义格式:

 

4738f6b46e974b40a461b7f8e7881f8b.jpg

5c7989e42bdb47b3b07f3df46281d8bc.jpg

参数表:

赋值参数(只提供输入值)

引用参数(提供输入值且返回操作结果)

6b9f1ace0de7457182f47254f9b3a46c.jpg

算法和算法分析

Algorithms and algorithm analysis

算法的描述

自然语言:英文,中文

流程图:传统流程图,NS流程图

伪代码:类语言:类C语言

程序代码:C语言程序

算法与程序

d71b12889dcf495aac5e58e8ba283a1f.jpg

算法特性:

1.有穷性

2.确定性

3.可行性

4.输入:0或多个

5.输出:一个或多个

算法设计的要求:

Requirements for algorithm design

1.正确性Correctness

2.可读性Readability

3.健壮性Robustness

4.高效性Efficiency

(健壮性,乍一听:哇哦)

1937fc43f40b485bb5e01f2f8450df24.jpg

算法效率

Algorithm efficiency

1.时间效率Time efficiency:算法所耗费的时间

2.空间效率Spatial efficiency:算法执行过程中所耗费的存储空间

二者有时候矛盾

算法时间效率的度量

A measure of the time efficiency of an algorithm

算法时间效率,可以依据该算法编制的程序,在计算机上执行,所消耗的时间来度量。

两种度量方法:

事后统计Post hoc statistics:实现算法,然后测量时间和空间的开销。(缺点是可能比较依赖计算机软硬件的条件就是会掩盖算法本身的一些优劣情况)

事前分析Prior analysis:对算法要耗费的资源进行估算的方法。

所以一般更多采用事前分析法

事前分析法

算法运行时间=一个简单操作所需的时间×简单操作次数

算法运行时间=∑每条语句的执行次数(语句频度)×该语句执行一次所需的时间(一般由机器本身软硬件环境决定,与算法无关)

假设每条语句执行一次所需的时间均为单位时间,即讨论算法运行时间就是讨论频度之和

7c8ef4e0300b4bf48ab9ecf6970e6401.jpg

17cfb1861af743eabefd223068fcf549.png数组vs链表

最近看一位印度top ceder的B站视频,讲的好棒

7a6779d5f6404fefa66fbe9e44501170.jpg 

1b2d61c899754802adb3c2ef45eec74e.jpg 

e4ec202de1cc4a9f9f86df4796468d66.jpg 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 17
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 9
    评论
数据结构算法是计算机科学中非常重要的概念。数据结构是组织和存储数据的方式,而算法是在给定的数据结构上执行操作的方法。数据结构算法的学习对于编写高效和可维护的代码至关重要。 JavaScript是一种流行的编程语言,广泛应用于Web开发和移动应用程序开发。它是一种高级语言,具有灵活性和易读性,使得学习数据结构算法用JavaScript实现变得容易。 在使用JavaScript实现数据结构算法时,可以利用JavaScript提供的一些内置数据结构,例如数组和对象。数组可以用于存储和访问有序的数据集合,而对象可以用于存储键值对。此外,JavaScript还提供了一些内置的数据结构和操作,例如队列、堆栈和链表等。 在学习数据结构算法时,可以使用JavaScript来实现各种常见的数据结构,例如栈、队列、链表、二叉树和图等。通过实践编写这些数据结构的JavaScript实现,可以更好地理解它们的原理和应用。同时,还可以通过使用JavaScript编写算法来解决各种问题,例如排序、搜索和图算法等。 使用JavaScript实现数据结构算法的好处之一是可以直接在浏览器中运行和调试代码,无需额外的编译和配置。此外,JavaScript的简洁语法和灵活性使得代码编写变得简单和直观。 总之,数据结构算法是计算机科学中的基础知识,而JavaScript是一种流行且易于学习和使用的编程语言。通过学习和实践数据结构算法与JavaScript的结合,可以提高编写高效和可维护代码的能力。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值