一、问题背景

不管是计算机专业的考研初试还是工作面试,数据结构都是很重要的课程。而博主最近看的王道论坛2020的数据结构开篇就有按照逻辑结构和存储结构将各种数据结构进行分类,本文就结合所有知识点充分讲解各个数据结构之间的区别与联系。

二、相似概念的线性表区分

在数据结构考试题目中我们总是要区分这三个概念:线性表顺序表有序表链表,甚至还有线性表的其他概念。
下图便是博主在结合王道论坛数据结构书本上以及网络上的相关线性表的概念做出的思维导图。

1.线性表

线性表是具有相同特性的数据元素的一个有限序列。线性表属于逻辑结构中的线性结构,它包括顺序表、链表、栈、队列等。

2.顺序表

顺序表是顺序存储结构的线性表,是把线性表中的所有元素按照其逻辑顺序依次存储到计算机存储器中指定位置开始的一块连续的物理地址的空间中。由于顺序表的逻辑地址与其物理地址皆相邻,故称为顺序表。
编程语言中的数组就是顺序表的一个典型实例。

3.链表

链表是链式存储结构的线性表,是用任意一组物理地址来存储数据元素,而数据元素之间的逻辑关系通过指针来表示。所以它的存储结构可以是连续的,也可以不是连续的。
一般我们说的链表都是不连续的。有一种用数组来表示的特殊链表,叫做静态链表,它的存储结构就是连续的。

4.有序表

我们很容易把有序表与顺序表链表相提并论,其实这是错误的。因为顺序表链表是根据线性表的存储结构(顺序或链式)来划分概念的,而有序表是根据线性表的数据元素的数值大小来划分概念,故有序表顺序表链表不是相互独立的,而是内容互相交错的。

有序表是指表中所有数据元素的数值以递增或递减方式有序排列,是数据元素的数值的有序性。
有序表只描述元素之间的逻辑关系,故为逻辑结构,因此有序表既可以顺序存储也可以链式存储。

例如,数组int array[3]=[1,2,3];是顺序存储结构的有序表。因为是数组,所以是顺序存储结构;因为数据元素[1,2,3]是从小到大排列,故是有序表。而单链表1->2->3则是链式存储结构的有序表。由这个例子可见:有序表顺序表链表不是相互独立的,而是内容互相交错的,我们不能把他们相提并论。

三、逻辑结构与存储结构的区分

在数据结构的考研真题和计算机笔试中,总有区分逻辑结构与存储结构的题目。
下图是博主总结的数据结构的三要素:逻辑结构、存储结构(物理结构)、数据运算的思维导图。

先说结论:线性表、有序表是逻辑结构;顺序表,链表是存储结构。

逻辑结构与存储结构的判定方法:当一个结构(如数组、链表、树、图),在逻辑结构中只有一种定义,而在物理结构中却有两种或多种定义,那么这个结构就属于逻辑结构;相反,当此结构在原有基础上加上了某种限定词(如二叉树->线索二叉树),使得其在物理结构中只有一种定义,那么这个结构就属于物理(存储)结构,或称为数据结构;

举例1:栈属于什么结构?
分析:栈在逻辑结构中只能属于线性结构,而在物理结构中它可以使用顺序存储(数组),也可以使用链式存储(链表),所以说栈是一种逻辑结构。

举例2:线索二叉树属于什么结构?
分析:首先因为二叉树既可以顺序存储又可链式存储,故可以得到二叉树是一种逻辑结构。但是线索二叉树是二叉树加上限定词线索后的链表结构(不能用顺序存储),也就是说,线索二叉树在计算机内部的只有一种存储结构,所以线索二叉树是物理结构。

逻辑结构和存储结构的区别点在于:数据的逻辑结构是独立于在计算机中的存储结构的,数据的存储方式有多种不同的选择。例如栈是一种逻辑结构,它可以用顺序存储也可以用链式存储。

而数据结构是既可以描述逻辑结构又可以描述存储结构和数据运算,必须包含以上三种元素。所以像顺序表、哈希表、单链表都是数据结构。


本文参考文献:
[1]线性表,顺序表,链表,数组的区别与联系
[2]数据结构知识整理4线性表——顺序表、链表、有序表
[3]有序表
[4]如何判断某种结构是逻辑结构还是存储结构或数据结构?

数据结构考研:线性表,顺序表,有序表,链表,数组的概念的区别与联系(软件工程/计算机/王道论坛)相关推荐

  1. 数据结构考研:数据结构的三要素:逻辑结构,存储结构,数据计算的详细区分与讲解(软件工程/计算机/王道论坛)

    一.问题背景 不管是计算机专业的考研初试还是工作面试,数据结构都是很重要的课程.而博主最近看的王道论坛2020的数据结构开篇就有数据结构的三要素:逻辑结构,存储结构,数据计算,而在数据结构的考研真题和 ...

  2. LeetCode Merge k Sorted Lists(有序单链表数组的合并)

    题意:给出一个有序单链表数组,将其合并成一个有序单链表 思路:将其转化成两个单链表合并的问题,用递归方式来实现 代码如下: public class Solution {private ListNod ...

  3. 数据结构与算法(8-2)有序表查找(折半查找(二分查找)、插值查找)

    目录 一.折半查找(二分查找) 二.插值查找 总代码 一.折半查找(二分查找) 原理:一次次折半,不断向着查找值的位置靠近 . 适用场景:有序(必须) 流程:开始时,min标志首,max标志尾,med ...

  4. 归并排序 c++_数据结构:排序(4)||有序表的归并(归并排序)、基数排序

    归并排序 归并排序想必大家并不陌生,它的算法思路也十分清晰,且很容易发现,它是可以递归的: 对于有序表的归并算法:依次比较有序表表首,将表首元素插入新数组,移动表首指针,再更改原数组中元素. #inc ...

  5. 数据结构课程设计:顺序结构、动态链表结构下的一元多项式的加法、减法、乘法的实现...

    原来做的数据结构课程设计,今天整理资料时偶然发现了,自己留着没啥意思,共享一下吧,互相交流学习 要求 设有一元多项式Am(x)和Bn(x). Am(x)=A0+A1x1+A2x2+A3x3+- +Am ...

  6. 数据结构与算法第二章 线性表、栈、队列、数组、字符串、树、二叉树、哈希表的增删查

    03 增删查:掌握数据处理的基本操作,以不变应万变 通过前面课时的学习,相信你已经建立了利用数据结构去完成时空转移的思想.接下来,你需要在理论思想的指导下灵活使用.其实,要想灵活使用数据结构,你需要先 ...

  7. 数据结构与算法——6. 抽象数据类型:无序表与有序表及其链表实现

    文章目录 一.无序表(unordered list)抽象数据类型 1. 无序表的定义 2. 采用链表实现无序表 (1)链表 (2)链表节点 (3)python实现链表节点 (4)python实现链表 ...

  8. 数据结构与算法(Python版)十六:有序表抽象数据类型及Python实现

    抽象数据类型:有序表OrderedList 有序表是一种数据项依照其某可比性质(如整数大小. 字母表先后) 来决定在列表中的位置 越"小"的数据项越靠近列表的头, 越靠" ...

  9. 数据结构15: 有序表抽象数据类型

    目录 一.什么是有序表orderedlist ? 二.orderedlist定义的操作 1.search方法 2.add方法 3.所有代码 四.链表实现的算法分析 一.什么是有序表orderedlis ...

  10. python数据结构: 有序表

    1. 有序表 ❖有序表是一种数据项依照其某可比性质(如整数大小.字母表先后)来决定在列表中的位置 ❖越"小"的数据项越靠近列表的头,越靠"前" 2.抽象数据类型 ...

最新文章

  1. 类的operator new与operator delete的重载
  2. cf relevent R package
  3. selenium一些基本语句
  4. jpa 动态查询条件 数组_Spring data jpa 复杂动态查询方式总结
  5. 模版设计模式概述和使用
  6. SAP专家通过调试的方式解决过的SAP UI5问题列表
  7. 数据挖掘基础数学知识博客
  8. OpenBSD 现已支持 USB 3.0
  9. Linux如何从零开始搭建rsync服务器(centOS6)
  10. 基于JavaWeb的学生信息管理系统
  11. 串口转usb驱动c语言程序,电脑中USB转串口如何正确安装对应的驱动程序
  12. h3c交换机配置教程命令(新手配置交换机详细教程)
  13. 分类--ROC 和曲线下面积
  14. 概率论的学习和整理11:伯努利试验的3种分布:0-1分支,几何分布, 二项分布
  15. 【沃顿商学院学习笔记】宏观经济学——09欧元区Euro Zone
  16. UE4 记录 UE4 中贴图
  17. JavaWeb综合案例——商品后台管理系统
  18. 基础会计学习笔记4 会计核算基本方法(会计工作的主要内容)
  19. Java异常 | JedisException: Could not get a resource from the pool
  20. 键盘输入,大写字母变小写,小写变大写

热门文章

  1. 坐标转换-换带计算(附软件下载)
  2. 台达伺服b3参数_台达ECMA伺服马达规格参数表
  3. 啊哈C语言 第8章 游戏时间到了(第29讲)
  4. 基于FPGA的人脸识别
  5. 【实用数学手册(第2版)扫描版.pdf】和【免安装Matlab.7.0.绿色破解U盘便携移...】 百度网盘下载地址
  6. 有哪些适合女生练字的字帖?
  7. 菜鸟Spring Cloud入门教程
  8. 【自然语言处理】【知识图谱】知识图谱表示学习(一):TransE、TransH、TransR、CTransR、TransD
  9. 六款练手的javaweb项目源码!
  10. AP类WiFi模块系列二:半成品主板式大功率AP类WiFi模块