数据结构(C++语言描述)第一章 绪论

前言:第一次博客文章,用于记录学习南师大本科数据结构这门课的相关内容。
学科介绍
数据结构是研究计算机非数值计算问题中的数据对象以及它们之间的关系和操作算法的学科。
①数据的逻辑结构--数据关系之间的逻辑关系; 
②数据的存储结构--数据在计算机中的存储;   
③操作算法---插入、删除、修改、查询、排序等针对这些关系的基本操作算法。
数据的逻辑结构和存储结构
1. 数据的逻辑结构:
数据的逻辑结构描述了数据之间的关系和组织方式。以下是几种常见的数据逻辑结构:
  • - 线性结构:数据元素之间存在一对一的关系,形成一个线性序列。常见的线性结构包括线性表、栈、队列和链表。
  • - 树形结构:数据元素之间存在一对多的关系,形成一个树状结构。常见的树形结构包括二叉树、堆、B树等。
  • - 图形结构:数据元素之间存在多对多的关系,形成一个图形结构。常见的图形结构包括有向图和无向图等。
  • - 集合结构:数据元素之间没有特定的关系,彼此独立存在。常见的集合结构包括数组和哈希表等。
注:树结构和图结构也称为非线性结构
2. 数据的存储结构:
数据的存储结构描述了数据在计算机内存或外部存储介质中的实际存储方式。以下是几种常见的数据存储结构:
  • - 顺序存储结构:将数据存储在一块连续的存储空间中,通过元素的物理地址进行访问。常见的顺序存储结构包括数组。
  • - 链式存储结构:通过每个元素存储下一个元素的地址,将数据存储在离散的存储块中。常见的链式存储结构包括链表。
  • - 索引存储结构:除了存储数据本身外,还建立一个索引表来记录数据元素的地址信息。常见的索引存储结构包括索引顺序表和索引链表。
  • - 散列存储结构:利用散列函数将数据元素存储在不同的存储位置上,通过关键字进行存取。常见的散列存储结构包括哈希表。
数据的逻辑结构和存储结构可以是相互独立的,即可以使用不同的存储结构来表示相同的逻辑结构。例如,可以使用数组或链表来表示线性表这一逻辑结构。
算法的概念、特性与评判标准
算法(Algorithm)是对特定问题求解步骤的一种描述,它是指令的有限序列,其中每一条指令表示一个或多个操作。
特性:输入,输出,有穷性,确定性,可行性
评价:正确性,健壮性,可读性,高效率,低存储空间需求
算法与程序的联系
  1. 程序=算法+数据结构   
  2. 程序是算法的一种精确描述
  3. 数据结构是研究非数值计算问题中的数据和他们之间关系和操作算法的学科。
如何提高程序的可读性?
  1. 模块化结构
  2. 加注释
  3. 变量命名有意义
  4. 不用“goto”语句
  5. 不用全局变量
类和数据结构之间的关系
数据结构中的基本概念
  1. 数据: 能输入到计算机中的符号集合.
  2. 数据元素: 数据的基本单位. 
  3. 数据对象: 具有相同性质的数据元素的集合.
  4. 数据结构:  DATA STRUCTURE 数据及其相互关系的集合.        分为逻辑结构和存储结构(物理结构).
    1. 数据结构----------------类CLASS 
    2. 数据之间的关系------- 属性  
    3. 基本操作  -------------  方法  
  5. 数据类型:一个数值的集合, 以及定义于这个数值集合上的一组操作的总称。   例如C++语言中的数据类型 :基本数据类型、指针类型、数组类型、结构体类型、类class
  6. 抽象数据类型:是指一个数学模型以及定义在该模型上的一组操作。抽象数据类型的定义仅取决于它的一组逻辑特性,而与其在计算机内部如何表示和实现无关,即不论其内部结构如何变化,只要它的数学特性不变,都不影响其外部的使用。
大O表示法
大O表示法指出算法的运行速度有多快,指出了最糟情况下的运行时间,这里的速度不是时间,而是操作数的增速,因此谈论算法的速度时,我们说的是随着输入的增加,其运行时间将以怎样的速度增加。
时间复杂度=程序的语句条数(数量级)
例:某个算法的时间复杂度是O(n^2),表明该算法基本语句执行次数与n^2成正比。
常见的算法类型
常用的算法大致可分为:
(1)蛮力法:也称穷举法,遍历所有元素
(2)贪心法:基本思想是期望通过局部最优解的选择来产生全局最优解
(3)递归法:基本思想是吧问题转化为规模缩小了的同类问题的子问题,然后递归调用函数来得到问题的最优解
(4)递推法:基本思想从问题的初始条件出发,利用特定关系得到中间推论,直至推出所需求的最终结果。
(5)分治法:把一个规模较大的问题划分成若干个规模较小的、独立的且与原问题类似的子问题,逐个递归求解子问题,然后将各个子问题合并得到原问题的解。
(6)回溯法:一步一步向前试探,等有多种选择时选择任意一种,只要可行就继续向前,一旦失败时就后退到前一状态选择其他可能性。
(7)动态规划法:把大问题分解为若干小问题,通过求解子问题来得到原问题的解。由于这些子问题相互包含,为了复用已计算的结果,常把计算的中间结果全部保存起来,自底向上多路径地求解计算原问题的解。

本章额外介绍:欧几里得辗转相除法

自然语言描述:两个整数的最大公约数等于其中较小的数和两数相除余数的最大公约数——求最大公约数

代码实现如下:

#include<iostream>
using namespace std;
int CommonFactor(int m,int n)
{
    int r=m%n;
    while(r!=0)
    {
        m=n;
        n=r;
        r=m%n;
    }
    return n;
}

  • 5
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值