数据结构绪论、线性表——从零起步的数据结构学习日志1【极客BOY-米奇】

前言(转载请说明作者:极客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链表

数据结构的体系

抽象/描述
是一种
D.S.研究结构
关系/逻辑结构
存储/物理结构
线性结构
非线性结构
线性表
队列
双队列
...
顺序存储
链式存储
...
List
SqList
LinkList

线性结构

顺序映象
链式映象
线性表类型
实现

线性结构的基本特征

线性结构是一个数据元素的有序(次序)集

  1. 集合中必存在唯一的 “第一元素”。
  2. 集合中必存在唯一的 “最后元素”。
  3. 集合中除最后元素在外,均有 唯一的 “后继 ”。
  4. 集合中除第一元素在外,均有 唯一的 “前驱 ”。

PS:注意“后继”和“前驱”名词

线性表

线性表是一种最简单的线性结构

线性表是数据结构学习的 “地基”,所以学好与熟悉线性表是非常有必要的

线性表的类型定义

线性表的类型定义即线性表的 抽象数据类型(ADT) 定义,又可以说是在讲关系
PS:

ADT
数据对象
数据关系
基本操作
抽象数据类型线性表(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

ADT List 实现
结构初始化操作
结构销毁操作
引用型操作
加工型操作
结构初始化操作InitList

初始化即从无到有
InitList(&1 L)

操作结果:
构造一个的线性表L。

结构销毁操作DestoryList

销毁即从有到无
DestoryList(&L)

操作结果:
销毁一个存在的线性表L。

引用型操作

以下七个操作均未对线性表L进行修改

  1. ListEmty(L) 判断线性表L是否为空 返回值为布尔型

  2. ListLength(L) 求线性表L长度

  3. PriorElem(L,cur_e,&pre_e) 求线性表L中数据元素cur_e的前驱放入pre_e变量中

  4. NextElem(L,cur_e,&next_e) 求线性表L中数据元素cur_e的下个元素放入变量next_e中

  5. GetElem(L,i,&e) 取线性表L中第i个位置的元素放入变量e中

  6. LocateElem(L,e,compare()) 取线性表L中满足compare()函数的元素e的元素位序

  7. (非重要)ListTraverse(L,visist()) 遍历线性表L(常用于二叉树与图)

PS:cur_e 数据元素(非数值);&next 后继

结点包含数据元素并且还包含一个或者多个指针

数据元素:(引用自百度百科

数据元素(data element)是计算机科学术语。它是数据的基本单位,数据元素也叫做结点或记录。在计算机程序中通常作为一个整体进行考虑和处理。有时,一个数据元素可由若干个数据项组成,例如,一本书的书目信息为一个数据元素,而书目信息的每一项(如书名、作者名等)为一个数据项。数据项是数据的不可分割的最小单位。

加工型操作

以下操作均对线性表L进行了修改

  1. ClearList(&L) 清空线性表L

  2. PutElem(&L,i,e) 修改线性表中第i个位序的元素为e

  3. ListInsert(&L,i,e) 在线性表L中第i个位序插入元素e

  4. ListDelete(&L,i,&e) 线性表L中删除第i个位序的元素 并把元素赋给e

顺序表

数组顺序表的一种特例,其区别在于数组一般存储的是一些简单的数据类型,而顺序表可以是抽象的,可描述的。


  1. &语法规则C++特有,表示对修改的数进行标注,e.g.&L:对参数L进行修改。 ↩︎

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

极客BOY

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值