数据结构基础

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

 

  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
数据结构是计算机科学中非常重要的一个概念,它关注如何有效地存储和组织数据以及对数据进行操作和管理。C语言是一种功能强大且广泛应用于系统和应用程序开发的编程语言,也是学习数据结构的常用语言之一。 在C语言中,常用的数据结构包括数组、链表、栈、队列、树等。下面我将简单介绍这些数据结构的基本概念和实现方式: 1. 数组(Array):是一种线性数据结构,可以在内存中连续存储多个元素。通过索引可以快速访问数组中的元素,但插入和删除操作较慢。 2. 链表(Linked List):是一种通过指针在内存中连接起来的数据结构。链表的插入和删除操作比较快,但访问元素需要遍历链表。 3. 栈(Stack):是一种后进先出(LIFO)的数据结构,只能在栈顶进行插入和删除操作。 4. 队列(Queue):是一种先进先出(FIFO)的数据结构,只能在队尾插入元素,在队头删除元素。 5. 树(Tree):是一种非线性的数据结构,由节点和边组成。常见的树结构包括二叉树、二叉搜索树和平衡二叉树等。 在C语言中,可以使用结构体来定义和表示数据结构。例如,可以定义一个链表节点的结构体: ``` struct ListNode { int val; // 节点的值 struct ListNode *next; // 指向下一个节点的指针 }; ``` 然后通过操作指针来进行链表的插入、删除和遍历等操作。 这只是数据结构基础概念和C语言实现方式的简要介绍,实际上还有很多其他的数据结构和算法。如果你对某个具体的数据结构或算法有更深入的了解,我可以为你提供更详细的解答。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值