数据结构第二章

吃可爱长大的小学妹 提交于 2020-02-27 09:44:13

数据结构的第二章课程知识点

名词简称

名词 意义
DS(Data Strucuture) 数据结构
ADT/Abstract Date Type 抽象数据类型
List 线性表
SeqList/SqList 顺序表
LinkedList/LinkList/LIST 链表

数据结构的体系

是一种
线性结构
非线性结构
List
SqList
LinkList
顺序存储
链表存储
关系/逻辑结构
线性表
队列
双队列
......
DS.数据结构
存储/物理结构
顺序存储
.....

抽象数据类型

注:
(A为抽象、B为数据、T为类型
ADT Complex{
数据对象
D={e1,e2| e1,e2∈RealSet}
数据关系
R={<e1,e2>| e1是复数的实数部分e2是负数的虚数部分
基本操作
AssignComplex(&Z,V1, V2)
操作结果:构造复数Z,其实部和虚部分别被赋以参数V1和V2的值。

DestroyComplex(&Z)
操作结果:复数Z被销毁

GetReal(Z,&realPart)
初始条件:复数已存在。
操作结果:用realPart返回复数Z的实部值。

GetImag(Z,&ImagPart)
初始条件:复数已存在。
操作结果:用ImagePart返回复数Z的虚部值。

Add(Z1,Z2,&sum)
初始条件:Z1,Z2是复数
操作结果:用sum返回两个复数Z1,Z2的和值。
}ADT Complex

ADT的数据特征
数据抽象:用ADT描述程序处理的实体时,强调的是其本质的特征、其所能完成的功能以及它和外部用户的接口(即外界使用它的方法)。

数据封装:将实体的外部特征和内部实现细节分离,并且对外部用户隐藏其内部实现细节。

**

抽象数据类型的框架

ADT抽象数据类型名{
数据对象:<数据对象的定义>
数据关系:<数据关系的定义>
基本操作:<基本操作的定义>
}ADT 抽象数据类型名

抽象数据类型的表现和实现

(抽象数据类型需要通过固有具体类型来实现)

例:

//---存储结构的定义
     typedef struct{
     float realPart;//realPart实部
     float imagPart;//imagPart虚部
                   }complex;

例:

//---基本操作的实现
    Void add(complex Z1,complex Z2,complex &sum)
    { //以sum返回两个复数Z1、Z2的和
    sum.realpart=Z1.realpart+Z2.realpart;
    sum.imagpart=Z1.imagpart+Z2.imagpart;
    }
   /*Z1=a+bi;
    *Z2=c+di;
    *Z1+Z2=(a+b)+(c+d)i;
    */

线性结构

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

顺序映像:以x的存储位置和y的存储位置之间某种关系表示逻辑大小<x,y>.

线性结构的基本特征

线性结构是一个数据元素的有序(次序)集,这是线性结构的基本特征

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

线性表

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

线性表的类型定义

线性表的类型定义线性表的 抽象数据类型ADT)定义,可以分为三个部分

如图:

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}
:< ai-1 , ai >即有序
设线性表为(a1,a2,…,ai,…,an),称i为ai在线性表中的位序

:下标和位序是错位一个数字的!
} ADT List

线性表的基本操作

线性表的基本操作
结构初始化操作
结构销毁操作
引用型操作
加工型毁操作

结构初始化操作InitList(初始化即从无到有)
InitList(&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(常用于二叉树与图)

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

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

数据元素:

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

加工型操作⭐
以下操作均对线性表L进行了修改

1.ClearList(&L) (清空线性表L)
初始条件:线性表L已存在。
操作结果:将L重置为空表。

2.PutElem(&L,i,e)(修改线性表中第i个位序的元素为e)
初始条件:线性表L已存在且1<=i<=LenthList(L)
操作结果:L中第i个元素赋值同e的值。

3.ListInsert(&L,i,e) (在线性表L中第i个位序插入元素e)
初始条件:线性表L已存在,且1<=i<=LenthList(L)+1.。
操作结果:在L的第i个元素之前插入新的元素e,L的长度增1。

4.ListDelete(&L,i,&e) (线性表L中删除第i个位序的元素 并把元素赋给e)
初始条件:线性表L已存在且非空,1<=i<=LenthList(L)。
操作结果:删除L的第i个元素,并用e返回值,L的长度减1。

顺序表

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

#define MAXSIZE  100
//线性表存储空间的分配量,即数组长度
typedf struct
            {ElemType elem[MAXSIZE];
            int length;//当前长度
            }SquList//俗称顺序表

typedef(类型转换)
ElemType(不是C语言合法关键字,代表这个算法可以处理任意数据类型的)
elem(用a、b也行或其它都行)

    struct
           {ElemType elem[MAXSIZE];
            int length;//当前长度
            }

这一块是结构体。

总体意思:用了typedef命令把结构体赋给了SqIist。
例:typedef int A
即可以用A a⇔int a
意思是:原来用int整型变量当用了typedef就是把整型变量的能力全部赋给了任意一个关键字A。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!