03 – 刷题心得 第一章绪论

一、数据结构的基本概念(王道)

03 - 刷题心得 第一章绪论

1、可以用抽象数据类型定义一个完整的数据结构

抽象数据类型ADT – 描述数据的逻辑结构和抽象运算,通常用数据对象,数据关系,基本操作集来表示定义一个完整的数据结构。

抽象数据类型(Abstract Data Type, ADT)是一种编程概念,它只关注数据 “能做什么”(功能),而不关心 “如何实现”(细节)。可以理解为 “黑箱”:用户只需要知道可以调用哪些操作(比如 “添加元素”“删除元素”),不需要知道这些操作内部是怎么完成的。

举个生活化的例子:你用手机打电话时,只需要知道按 “拨号键” 能拨出电话(功能),不需要知道手机内部是如何处理信号、连接基站的(实现细节)。这里的 “电话功能” 就类似 ADT 的定义。

ADT 的核心是封装(隐藏实现)定义接口(暴露功能)

2、非线性数据结构 – 树和图、集合;线性数据结构 – 一般线性表、栈、队列、串、数组

数据的逻辑结构分为线性和非线性
03 - 刷题心得 第一章绪论

逻辑结构是指数据元素之间的逻辑关系,即从逻辑结构关系上描述数据;它与数据的存储无关,独立于计算机

3、顺序表、哈希表、单链表 – 既描述数据结构,又描述存储结构和运算;

有序表属于逻辑结构仅描述元素之间的逻辑关系,既可以链式存储,也可以顺序存储

4、数据结构三要素:逻辑结构、存储结构(物理结构)、数据运算

逻辑结构与存储结构的区别

数据的逻辑结构从面向实际问题出发,抽象表达,独立于存储结构;

数据的存储结构是逻辑结构在计算机上的映射,不能独立于逻辑结构

5、在存储数据时,不仅要存储数据元素的值,而且要存储数据元素之间的关系

6(应用题)、对于两种不同的数据结构,逻辑结构或者物理结构一定不相同吗?

答案

数据的运算也是数据结构的一个重要方面。

对于两种不同的数据结构,它们的逻辑结构和物理结构完全有可能相同。比如二叉树和二叉排序树,二叉排序树可以采用二叉树的逻辑表示和存储方式,前者通常用于表示层次关系,而后者通常用于排序和查找。虽然它们的运算都有建立树、插入结点、删除结点和查找结点等功能,但对于二叉树和二叉排序树,这些运算的定义是不同的,以查找结点为例,二叉树的平均时间复杂度为 O(n),而二叉排序树的平均时间复杂度为 O(logn)。

逻辑结构与物理结构的独立性

  • 逻辑结构相同,物理结构不同:如顺序表与链表。
  • 物理结构相同,逻辑结构不同:如用链式存储的二叉树与图。
  • 因此,两种不同的数据结构可能在逻辑结构或物理结构上存在相同点,并非一定完全不同。

结构定义

  • 二叉树:每个节点最多有两个子节点(左子节点和右子节点),子节点的顺序可以任意,没有特定的排列要求。
  • 二叉排序树(BST):是一种特殊的二叉树,每个节点的值需满足:
    • 左子树上所有节点的值均小于该节点的值;
    • 右子树上所有节点的值均大于该节点的值;
    • 左右子树也分别为二叉排序树。
// 二叉树的节点可以随意排列,例如
    1
   / \
  3   2
 /     \
5       4

// 二叉排序树的节点必须满足左小右大的顺序,例如:
    3
   / \
  1   4
   \   \
    2   5

7、试举一例,说明对于相同的逻辑结构,同一种运算在不同的存储方式下实现时,其运算效率不同。

答案

线性表:顺序存储方式、链式存储方式。

在顺序存储方式下,在线性表中插入和删除元素,平均要移动近一半的元素,时间复杂度为O(n);

在链式存储方式下,插入和删除的时间复杂度为O(1)。

知识要点补充说明备注
数据信息载体
数据元素数据基本单位逻辑、物理(存储)
数据对象相同性质的数据元素集合数据的子集
数据类型原子、结构、抽象
数据结构三要素逻辑、物理(存储)、数据运算
逻辑结构集合、线性结构、树形结构、图结构(网状结构)
存储结构顺序存储、链式存储、索引存储、散列存储(Hash存储)

本网站原创文章版权归何大锤的狂飙日记所有。发布者:何大锤,转转请注明出处:何大锤的博客

(1)
何大锤的头像何大锤管理团队

相关推荐

  • C语言初阶 – 指针

    一、指针是什么? 指针是什么? 指针理解的2个要点: 1、指针是内存中一个最小单元(内存单元)的编号,也就是地址 2、平时口语中说的指针,通常是指针变量,用来存放内存地址的变量 总结:指针就是地址,口语中说的指针通常指的是指针变量 那么我们就这样理解:内存 指针变量 我们可以通过&(取地址操作符)取出变量的内存地址,把地址可以存放到一个变量中,这个变…

    2025年6月29日
    000
  • 09 通讯录管理系统

    通讯录管理系统 1、系统需求 通讯录是一个可以记录亲人、好友信息的工具。 本教程主要利用C++来实现一个通讯录管理系统 系统中需要实现的功能如下: 2、创建项目 创建项目步骤如下: 2.1 创建项目 打开vs2017后,点击创建新项目,创建新的C++项目 填写项目名称,选择项目路径 2.2添加文件 添加成功后,效果如图: 至此,项目已创建完毕 3、菜单功能 …

    2025年6月22日
    300
  • 08 结构体

    8 结构体 8.1 结构体基本概念 结构体属于用户自定义的数据类型,允许用户存储不同的数据类型 8.2 结构体定义和使用 语法:struct 结构体名 { 结构体成员列表 }; 通过结构体创建变量的方式有三种: 示例: 总结1:定义结构体时的关键字是struct,不可省略 总结2:创建结构体变量时,关键字struct可以省略 总结3:结构体变量利用操作符 &…

    2025年6月21日
    300
  • 07 指针

    7.1 指针的基本概念 指针的作用: 可以通过指针间接访问内存 7.2 指针变量的定义和使用 指针变量定义语法: 数据类型 * 变量名; 示例: 指针变量和普通变量的区别 总结1: 我们可以通过 & 符号 获取变量的地址 总结2:利用指针可以记录地址 总结3:对指针变量解引用,可以操作指针指向的内存 7.3 指针所占内存空间 提问:指针也是种数据类型…

    2025年6月20日
    300
  • 第2章 C语言概述

    一、复习题 1、C语言的基本模块是什么? 它们都叫函数 2、什么是语法错误?写一个英语例子和C语言例子 3、什么是语义错误?写一个英语例子和C语言例子 4、Indiana Sloth编写了下面的程序,并征求你的意见。请帮助他评定 第一行没有加<> 赋值语句错误 函数错误应该是printf 花括号不齐全 二、编程练习 2.1 2.2 2.3 编写一…

    2025年6月20日
    000

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

2211932694

在线咨询: QQ交谈

邮件:hdcblog1999@163.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信
网站建设中ing......