文章目录
前言(转载请说明作者:极客BOY)
-
2020.2.24
第一次发布版本
-
2020.5.12
完善与修改
截止2020.5.12日,本文暂时没有编写完毕
博主是来自滨州学院信息工程学院2019级软件2班的一名普通的学生。
数据结构上了一周的课程,发现这门课程并不是想象中的那么轻松,数据结构是对于程序设计的思路与过程进行再进修,输入编程中比较硬核的部分,当然不会像编程语言那样学习得轻松易懂。
什么是数据结构?
假如:
让你建立学生电子信息档案,可以存储学生的学号、姓名、性别、院系等信息,而且可以方便的查询和管理。
那么,该如何让存储学生的信息,让数据以什么形式可以更加方便与快捷的存储与查询这些信息,是数据结构的研究对象之一。
e.g.
学号 | 姓名 | 性别 | 院系 | 专业 | 籍贯 | 成绩 | 获奖情况 | …… |
---|---|---|---|---|---|---|---|---|
2017120201 | 马萧萧 | 女 | 信息工程系 | 计算机 | 山东 | 90 | 优秀学生 | …… |
我们可以把这样的某个学生信息抽象为一个点,所有学生可看成是这样一个个点组成的一条线。
像这样的数据结构,我们称为:线性表(简称:“表”)结构。
再假如:
有个N x N的国际象棋棋盘。要求在上面放置N个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上。
问:有多少种摆法?
一些名词简称
名词 | 意义 |
---|---|
DS(Data Structure) | 数据结构 |
ADT / Abstract Data Type | 抽象数据类型 |
List | 线性表 |
SeqList / SqList | 顺序表 |
LinkedList / LinkList / LIST | 链表 |
数据结构的体系
线性结构
线性结构的基本特征
线性结构是一个数据元素的有序(次序)集。
- 集合中必存在唯一的 “第一元素”。
- 集合中必存在唯一的 “最后元素”。
- 集合中除最后元素在外,均有 唯一的 “后继 ”。
- 集合中除第一元素在外,均有 唯一的 “前驱 ”。
PS:注意“后继”和“前驱”名词
线性表
线性表是一种最简单的线性结构
线性表是数据结构学习的 “地基”,所以学好与熟悉线性表是非常有必要的。
线性表的类型定义
线性表的类型定义即线性表的 抽象数据类型(ADT) 定义,又可以说是在讲关系 。
PS:
抽象数据类型线性表(ADT List)
定义
ADT List {
数据对象D=
{ ai | ai ∈ ElemSet , i=1,2,…,n , n-=0 }
ElemSet 即 Element Set:元素集
{n为线性表的表长。
n=0时称为线性表为空表。}
数据关系
R1={< ai-1 , ai -|ai-1 , ai ∈ D(数据对象) , i=2,3,…,n}
{PS:< ai-1 , ai -即有序
设线性表为(a1,a2,…,ai,…,an),称i为ai在线性表中的位序。
PS:下标和位序是错位一个数字的!}
} ADT List
结构初始化操作InitList
初始化即从无到有
InitList(&1 L)
操作结果:
构造一个空的线性表L。
结构销毁操作DestoryList
销毁即从有到无
DestoryList(&L)
操作结果:
销毁一个存在的线性表L。
引用型操作
以下七个操作均未对线性表L进行修改
-
⭐ListEmty(L) 判断线性表L是否为空 返回值为布尔型
-
⭐ListLength(L) 求线性表L长度
-
PriorElem(L,cur_e,&pre_e) 求线性表L中数据元素cur_e的前驱放入pre_e变量中
-
NextElem(L,cur_e,&next_e) 求线性表L中数据元素cur_e的下个元素放入变量next_e中
-
⭐GetElem(L,i,&e) 取线性表L中第i个位置的元素放入变量e中
-
⭐LocateElem(L,e,compare()) 取线性表L中满足compare()函数的元素e的元素位序
-
(非重要)ListTraverse(L,visist()) 遍历线性表L(常用于二叉树与图)
PS:cur_e 数据元素(非数值);&next 后继
结点包含数据元素并且还包含一个或者多个指针
数据元素:(引用自百度百科)
数据元素(data element)是计算机科学术语。它是数据的基本单位,数据元素也叫做结点或记录。在计算机程序中通常作为一个整体进行考虑和处理。有时,一个数据元素可由若干个数据项组成,例如,一本书的书目信息为一个数据元素,而书目信息的每一项(如书名、作者名等)为一个数据项。数据项是数据的不可分割的最小单位。
加工型操作
以下操作均对线性表L进行了修改
-
ClearList(&L) 清空线性表L
-
PutElem(&L,i,e) 修改线性表中第i个位序的元素为e
-
ListInsert(&L,i,e) 在线性表L中第i个位序插入元素e
-
ListDelete(&L,i,&e) 线性表L中删除第i个位序的元素 并把元素赋给e
顺序表
数组是顺序表的一种特例,其区别在于数组一般存储的是一些简单的数据类型,而顺序表可以是抽象的,可描述的。
&语法规则C++特有,表示对修改的数进行标注,e.g.&L:对参数L进行修改。 ↩︎