数据结构学习绪论

概念

数据的概念

  • 数据元素

    组成数据的最基本单位

  • 数据项

    一个数据由多个数据项组成

  • 数据对象

    性质相同的数据元素组成的集合

数据结构

数据结构:是指数据对象中数据元素之间的关系

逻辑结构

  • 集合结构

    数据元素之间没有特别关系,仅同属于一个集合

  • 线性结构

    数据元素之间是一对一的关系

  • 树形结构

    数据元素之间存在一对多的层次关系

  • 图形结构

    数据元素间是多对多的关系

物理结构

  • 顺序存储

    将数据存储在地址连续的存储单元里面

  • 链式存储

    将数据存储到任意的储存单元里面,通过地址保存的方式找到相关联的数据元素

算法

算法:特定问题求解步骤的描述

算法的特性

  • 正确性

    算法对于合法数据能够得到满足要求的结果;能处理非法输入,得到合理的结果;对于边界数据和压力数据都能得到满足

  • 可读性

    算法要方便阅读、理解和交流

  • 健壮性

    算法不应该产生莫名其妙的结果

  • 性价比

    利用最少的资源得到满足要求的结果

算法和数据结构间关系

程序 = 数据结构 + 算法

算法是为了解决实际问题而存在

数据结构是算法处理问题的载体

数据结构与算法相辅相成,共同解决问题

算法效率的度量

  • 事后统计法

    比较不同算法对同一组输入数据的运行处理时间

    缺陷:不容易准确度量算法的效率

  • 事前分析估算算法

    通过操作数量度量算法的效率

算法的时间复杂度

算法效率主要通过时间复杂度进行判断

大O表示法用于描述算法的时间复杂度,它只关心操作数的最高次项

算法效率的度量

  • 常见时间复杂度的比较

    O(1) < O(log n) < O(n) < O(n*log n) < O(n^2) < O(n^3) < O(2^n) < O(n!) < O(n^n)

    当时间复杂度大于O(n^3)时,即使n的值很小工程上也不接受

    一般在分析算法时,重点考虑在最坏情况下的时间复杂度

    算法重点关心时间复杂度

  • 算法的空间复杂度也适用于大O表示法

    空间换时间策略是开发中常用的策略

时间: 2024-10-07 16:18:22

数据结构学习绪论的相关文章

数据结构学习笔记——绪论

数据结构学习笔记——绪论 为了更贴切的描述一种数据结构,通常采用二元组表示:(对于一种数据结构其逻辑结构唯一) B=(D,R)其中,B是一种数据结构,它由数据元素的集合D和D上二元关系的集合R所组成.即D={ di | 1 <= i<= n, n > 0}R={ rj | 1 <= j<= n, n > 0}D 上的一个关系r是序偶的集合,对于r中任一序偶<x,y>(x,y属于集合D),把x叫做偶序第一节点,把y叫做偶序第二结点,又称序偶的第 一结点为第二结

【数据结构】绪论部分

今天由我来跟大家讲一下数据结构的绪论部分吧.数据结构整体复习主要靠理解.理解了学习起来其实是很轻松的事情,学进去了你也会发现很好玩.这篇只是个结构概括,理解就行. 1.1 基本概念 1.数据:即信息. 2.数据元素:数据的基本单位.如:一个学生记录就是一个数据元素,由学号.姓名等数据项构成(数据项为构成数据元素的不可分割的最小单位). 3.数据对象:相同性质的数据元素集合.数据的子集. 4.数据类型:一个值的集合和在此集合上一组操作的总称. 5.抽象数据类型:ADT.一个模型和在此模型上的一组操

小猪的数据结构学习笔记(四)

小猪的数据结构学习笔记(四) 线性表之静态链表 --转载请注明出处:coder-pig 本章引言: 在二,三中中我们分别学习了顺序表中的线性表与单链表,线性表有点类似于 我们前面所学的数组,而单链表使用的最多的是指针,这里问个简单的问题, 如果是在以前没有指针的话,前辈先人们怎么实现单链表呢?大家思考下! 没有指针,那么用什么来代替呢?前辈先人们非常机智,想出了使用下标+游标的方式 来实现单链表的效果!也就是今天要讲的--静态链表! 当然你也可以直接跳过本章,因为有了单链表就没有必要用静态链表了

小猪的数据结构学习笔记(二)

小猪的数据结构学习笔记(二) 线性表中的顺序表 本节引言: 在上个章节中,我们对数据结构与算法的相关概念进行了了解,知道数据结构的 逻辑结构与物理结构的区别,算法的特性以及设计要求;还学了如何去衡量一个算法 的好坏,以及时间复杂度的计算!在本节中我们将接触第一个数据结构--线性表; 而线性表有两种表现形式,分别是顺序表和链表;学好这一章很重要,是学习后面的基石; 这一节我们会重点学习下顺序表,在这里给大家一个忠告,学编程切忌眼高手低,看懂不代表自己 写得出来,给出的实现代码,自己要理解思路,自己

数据结构学习日记2:实现一个简单的线性表功能(链式存储方式)

数据结构学习日记,此次是用链表来实现一个线性表的功能 // ListTable1.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include<iostream> using namespace std; #define ERROR 0; #define OK 1; typedef int Status; typedef int ElemType; //声明一个节点 typedef struct Node { ElemType d

数据结构学习之二叉排序树

介绍:二叉排序树是以一定的规则排列树中元素,因而可以进行快速的排序和查询的树状数据结构,一般规则是:对于树中任意一个节点,左孩子严格小于根,根严格小于右孩子,有点像大根堆.(只是大根堆中左右孩子关系并不确定,且和根的关系是统一的,而且有上浮和下沉操作使得大根堆总是一棵完全二叉树,其不断弹出堆顶形成有序列的过程叫做堆排序.虽然二叉排序树中也有旋转操作使得树尽量平衡,但是由于数值大小分明的左右孩子,在进行平衡操作时远不如大根堆方便快捷.)对于一棵已经构造完成的排序二叉树,它的中序遍历序列即为升序排列

文章分享:简单数据结构学习:单向链表

文章分享:简单数据结构学习:单向链表:https://www.textarea.com/aprikyb/jiandan-shujujiegou-xuexi-danxiang-lianbiao-252/

数据结构学习系列之线性表(三)

前言数据结构学习,发现坚持下来比较难,本次学习与上次学习间隔了几个月,不管怎样还是要强迫自己坚持下来. 静态链表 用数组模拟链式结构的线性表,对于没有指针的编程语言,只能使用这种方式来模拟.这是大师们想出来的实现方法,体会大师们的编程思路,站在大师们的肩膀上解决一个又一个的难题.每个节点包含一个游标(数组数字索引),用于指向下个节点,所以静态链表也称为游标链表.规定数组第一个元素为备用链表(未被使用的数组游标,静态链表初始化时,会生成备用链表)的头节点,数组最后一个元素为链表的头节点.当需要插入

小猪的数据结构学习笔记(五)

小猪的数据结构学习笔记(五) 线性表之--循环链表                           --转载请注明出处:coder-pig 循环链表知识点归纳: 相关代码实现: ①判断是否为空表: ②单循环链表的存储结构 其实和单链表的结构是一样的! /*定义循环链表的存储结构*/ typedef struct Cir_List { int data; struct Cir_List *next; }Lnode; ③初始化循环单链表 代码如下: //1.循环链表的初始化 //表示一个元素,如