首页 > 编程语言 >数据结构与算法(三)线性表的定义与抽象数据类型

数据结构与算法(三)线性表的定义与抽象数据类型

时间:2024-09-09 13:21:15浏览次数:10  
标签:线性表 元素 数据类型 抽象数据类型 整型 数据结构 定义

目录

一、感受线性表的存在

二、线性表的定义

三、考题模拟

1、请问公司的组织架构是否属于线性关系?

2、那么班级同学的友谊呢?

3、那么班级的点名册是不是线性表?

四、抽象数据类型

1、数据类型的定义:

2、抽象数据类型

一、感受线性表的存在

        从这一篇开始,我们将介绍第一个数据结构:线性表。

        在正式介绍之前,我们先从图片来感受一下线性表的特征。

        这张图的内容,大家可以当成我们小学开学参加升旗仪式的时候,每个班级的人都特别多,而且刚刚开学,班主任想要区分每一位同学并不容易。所以我们想到了一个方法,让大家按照一个约定排成一队,大家只要记住前面一个同学,就能记住自己的位置了。而且老师也能很快第清点人数,万一有人走丢,也能通过询问哪位同学的前一位同学不见了,在最快的时间内知道谁走丢。

二、线性表的定义

        从刚才的描述中,线性表就和排队一样,具有线一样的结构。正式一点的定义如下:

        线性表(linear list)是具有相同特性的数据元素的一个有限序列。

        这里需要强调几个关键的地方:

        1、首先它是一个数列,也就是说元素之间是有个先来后到的,如果是下面这种就没有顺序。

        2、若元素存在多个,则第一个元素无前驱,而最后一个元素无后继,其他元素都有且只有一个前驱和后继。

        3、另外,线性表强调是有限的,事实上无论计算机发展到多强大,它所处理的元素都是有限的。(无限只存在于数学理论中)

        如果用数学语言来定义线性表,即为下文叙述:

        若将线性表记为(a_1,a_2,...,a_{i-1},a_i,a_{i+1},...,a_n),则表中 a_{i-1}领先于a_i,a_i领先于a_{i+1},称a_{i-1}a_i的直接前驱元素,a_{i+1}a_i的直接后继元素。下图为该定义的直观展示:

        线性表元素的个数n(n>=0)定义为线性表的长度,当n=0时,称为空表。

三、考题模拟

1、请问公司的组织架构是否属于线性关系?

        分析:一般公司的的架构呈现树状,并不满足线性表“只有一个前驱和后继”的说法,所以公司的组织架构不属于线性关系。

2、那么班级同学的友谊呢?

        分析:这个当然也不是,一个同学可以由好多个朋友,两个同学间也可以由好多共友,更像是一个复杂的图,网络,所以也不是线性关系。

3、那么班级的点名册是不是线性表?

        分析:班级的点名册是一种数学逻辑,按学号的顺序来排成一个线性表,所以是线性关系。

学号姓名性别职位
1张三班长
2李红副班长
3王强学习委员
4赵梦组长

四、抽象数据类型

1、数据类型的定义:

        在介绍抽象数据类型之前,我们应该了解数据类型的定义是什么?

        数据类型:是指一组性质相同的值的集合及定义在此集合上的一些操作的总称。 直白点说,例如很多编程语言的整型、浮点型、字符型这些指的就是数据类型。

        那么,当年那些设计计算机语言的人,为什么会考虑到数据类型呢?

        举个例子,大家都需要住房子,也都希望自己住的房子越大越好。但显然,住多大的房子取决于你有多少积蓄。于是,商品房就出现了各种各样的房型,有120平,有80平,有30平......这样就能满足大家的需求,大家可以根据自己的继续住进对应的房子里。

        同样,在计算机中,内存也不是无限大的,你要计算如1+1=2这样的整型数字的加减乘除运算,显然不需要开辟很大的内存空间。而如果你要计算1.23456789+2.987654321这样带大量小数的,就需要开辟比较大的空间才能存放得下。于是计算机的研究者们就考虑,要对数据类型进行分类,分出多种数据类型来适合不同的计算条件差异。

        例如在C语言中,按照取值的不同,数据类型可以分为两类:

        (1)原子类型:不可以再分解的基本类型,例如整型、浮点型、字符型等。

        (2)结构类型:由若干个类型组合而成,是可以再分解的,例如整型数组是由若干整型数据组成的。

2、抽象数据类型

        首先,什么是抽象?

        抽象和具体相对:是指抽取出事物具有的普遍性的本质。他要求抽出问题的特征而忽略非本质的细节,是对具体事物的一个概括。抽象是一种思考问题的方式,它隐藏了繁杂的细节。

        就像我们来形容一个人,美就是一种抽象,但是大眼睛,瓜子脸.....就是一种具体。

        我们对己有的数据类型进行抽象,就有了抽象数据类型。
        抽象数型(AbstractDataType,简称ADT丿是指一个数学模型及定义在该模型上的一组操作。抽象数据类型的定义仅取决于它的一组逻辑持性,而与其在计算机内部如何表示和实现无关。
        比如1+1=2这枰一个燥作,在不同CPU的处理上可能不一样,但由于其定义的数学特性相同,所以在计算机编程者看来,它们都是相同的。

        注意:“抽象"的意义在于数据类型的数学抽象持性。
        而且,抽象数据类型不仅仅指些己经定义并实现的数据类型,还可以是计算机编程者在设计
件程序时自己定义的数据粪型。
        例如一个3D游戏中,要定位角色的位置,那么总共会出(x,y,z)三个整型数据组合在一起的坐标。我们就可以定义一个point的抽象数据型,它拥有(x,y,z)三个整型变量,这样我们就可以方便的对一个角色的置进行操作。

        为了便于在之后的讲解中对抽象数据类型进行规范的描述,我们给出了描述抽象数据类型的标准格式:

        ADT:抽象数据类型名

        Data:数据元素之间逻辑关系的定义

        Operation:操作

(本节完)

参考资料:

1、挤地铁图片来源:北京地铁:最挤的地铁永远是你要坐的那一条_澎湃号·湃客_澎湃新闻-The Paper澎湃新闻

2、线性表1_哔哩哔哩_bilibili 鱼C小甲鱼

3、《数据结构教程》李春葆主编-清华大学出版社-2022.7

标签:线性表,元素,数据类型,抽象数据类型,整型,数据结构,定义
From: https://blog.csdn.net/less_duuuzx/article/details/142035351

相关文章

  • 实例:使用 gdb 查看进程内存中的数据结构
    代码示例首先,创建一个简单的链表程序linked_list.c,以演示如何使用gdb查看内存中的数据结构。#include<stdio.h>#include<stdlib.h>//定义链表节点结构体typedefstructNode{intdata;structNode*next;}Node;//添加新节点到链表的尾部voidappen......
  • 数据结构-堆-详解
    数据结构-堆-详解1.性质大根堆小根堆2.实现2.1structHeap、HeapInit、HeapDestroy2.2HeapPushAdjustUp2.3HeapPopAdjustDown2.4HeapTop、HeapSize、HeapEmpty3.应用3.1堆排建堆排序3.2TopK问题1.性质堆是一种特殊的完全二叉树,其父节点总是不大于/不小于子节......
  • 算法与数据结构——堆
    堆堆(heap)是一种满足特定条件的完全二叉树,主要分为两种类型:小顶堆(minheap):任意节点的值≤其子节点的值大顶堆(maxheap):任意节点的值≥其子节点的值堆作为完全二叉树的一个特例,具有以下特性:最底层节点靠左填充,其他层的节点都被填满我们将二叉树的根节点称为“堆顶”,将......
  • 数据结构题目 第一章
    题目1、数据结构被形式的定义为(K,R),其中K是( )的有限集合,R是K上关系的有限集合。A.算法  B.数据元素 C.数据操作 D.逻辑结构2、数据元素是数据的最小单位。 ( )3、存储数据时,通常不仅需要存储各数据元素的值,而且还要存储( )。A.数据的处理方法 B.数据元素的类型......
  • 【高阶数据结构】秘法(二)——图(一):图的基本概念和存储结构
    前言:今天我们要讲解的是数据结构中图的部分,这部分在我们实际生活中也是经常会碰到的,同时这部分也是数据结构中比较有难度的部分,这部分内容我会把它分为多章来进行讲解,今天我们先来讲解一下图的基本概念和存储结构目录一、图的基本概念1.图的定义2.术语解释3.图的分......
  • 【数据结构】栈与队列OJ题(用队列实现栈)(用栈实现队列)
    目录1.用队列实现栈oj题对比一、初始化二、出栈 三、入栈四、取队头元素:2.用栈实现队列 一、定义二、入队列三、出队列四、队头五、判空                                      ......
  • C++笔记19•数据结构:红黑树(RBTree)•
    红黑树1.简介:    红黑树,是一种二叉搜索树,但在每个结点上增加一个存储位表示结点的颜色,可以是Red或Black。通过对任何一条从根到叶子的路径上各个结点着色方式的限制,红黑树确保没有一条路径会比其他路径长出俩倍,因而是接近平衡的。当搜索二叉树退化为单支树时,搜......
  • 25版王道数据结构课后习题详细分析 第八章 8.4 选择排序
    一、单项选择题————————————————————————————————————————解析:正确答案:————————————————————————————————————————解析:正确答案:——————————————————————......
  • 树形结构-数据结构
    一、基本知识树:一对多的树形结构顶层的结点:称为根节点叶子结点(终端结点):最外围的结点,只有前驱结点,没有后继结点的结点,其结点的度是0分支结点:分支点是描述数据结构中的从根部出发(对有向图而言)有入度和出度的节点,(对无向图而言)不属于叶子节点的节点。出度不为0的结点称为分枝点......
  • 并发编程数据结构-栈
    并发编程数据结构-栈有锁栈Stack1-基础线程安全栈Stack1是一个简单的线程安全栈实现,使用了std::mutex来保证push和pop操作的原子性。主要特点包括:使用std::lock_guard确保操作期间栈的线程安全。提供了两种push操作(左值引用和右值引用),优化了性能。pop操作抛......