数据结构基础

1. 数据结构

数据的逻辑结构,存储结构及操作(数据的运算)

1.1 数据

数据:不只是一个单纯的数值,而是类似于一个集合的概念

数据元素:是数据的基本单位,由若干个基本项组成

数据项:是数据的最小单位,描述数据元素的信息

 注意:节点就是数据元素

 整个表为数据,每一行为数据元素,单个编号等信息为数据项

struct student    
{
    float weight;
    float height;
    int age;
};
int main(int argc, char const *argv[])
{
    struct student t1;                    // 数据元素/结点
    t1.weight = 123.6;                    // 数据项
    struct student stu_arr_23061[49];     // 数据对象
    return 0;
}

 示例:

思考:这里的数据元素、数据项以及数据对象都是什么呢?

数据元素:从第二行开始每一行就是一个数据元素。

数据项:对于某数据元素来说,它的编号、书名、作者以及出版社等为数据项。

数据对象:该表格除去第一行结构体定义外,剩下的整体就相当于一个结构体数组。

 1.2 逻辑结构

数据之间的逻辑规律和数据之间的关系

数据之间的关系:

1)线性关系 ----》 线性结构 ------》一对一 ------》线性表

2)层次关系 ------》树形结构 ---------》一对多 ---------》 树

3)网状关系 -------》 图状结构 --------》 多对多 ----------》 图

 

 1.3 存储结构

数据结构的逻辑结构在计算机中的具体实现

1.3.1 顺序存储结构

数组:在内存当中一段连续的内存空间中保存数据(如c语言中的一维数组)

1.3.2 链式存储结构

特点:数据在内存中是不连续的,通过指针进行连接

struct Node
    {
    int data;                   // 数据域
    struct Node *next;          // 指针域(指向和自身结构体类型一样的、逻辑上的下一个结点
};

// 定义四个节点 ABCD
struct Node A = {1, NULL}; 
struct Node B = {2, NULL};
struct Node C = {3, NULL};
struct Node D = {4, NULL};

// 用指针链接ABCD
A.next = &B;
B.next = &C;
C.next = &D;

1.3.3 索引存储结构

提高查找速度

索引表 + 数据文件

 

查找一个人的电话就可以先查索引表,再查相应的数据文件,加快了查询速度。

特点:

  1. 检索速度快。
  2. 多了一张索引表,故占用内存多。
  3. 删除数据文件时要及时更改索引表。

1.3.4 散列存储结构

数据在存储的时候与关键码之间存在某种对应关系

存的时候按照对应关系存

取的时候按照对应关系取

2. 算法

解决问题的思想方法

软件 = 程序 + 文档

程序 = 数据结构 + 算法

软件 = 数据结构 + 算法 + 文档

算法 = 对结点集合的运算和操作 + 控制结构

2.1 算法与程序

算法:解决问题的思想方法

程序:用计算机语言对算法的具体实现

2.2 算法与数据结构

算法 + 数据结构 = 程序

算法的设计:取决于选定的逻辑结构

算法的实现:依赖于采用的存储结构(顺序、链式)

2.3 算法的特性

1)有穷性:算法的执行步骤是有限的

2)确定性:算法的每一步都是有明确含义的

3)可行性:算法能够在有限的时间内完成

4)输入

5)输出

2.4 评价算法好坏

正确性:保证算法可以正确完成功能

易读性:容易被解读

健壮性:容错处理

高效性: 执行效率,算法执行快慢容易受到计算机性能的影响,不可以作为评判 算法高效性的标准,这通过可执行语句重复执行次数来衡量算法是否高 效。(时间复杂度)

低存储型:占用空间小(空间复杂度)

2.5 时间复杂度

算法的可执行语句重复执行的次数

通常时间复杂度用一个问题规模函数来表达

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

T(n) //问题规模的时间函数

n 问题规模

O //时间数量级

f(n) //算法的可执行语句重复执行的次数 用问题规模n的某个函数f(n)来表达

计算大O的方法

1) 根据问题规模n写出表达式f(n)

2) 只保留最高项,其他项舍去

3) 系数化为1

4) 如果只有常数项,将其置为1

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值