数据结构学习笔记3

来源:互联网 发布:淘宝商品id在哪里看 编辑:程序博客网 时间:2024/06/07 13:30

之前断断续续的学习数据结构的关于线性表的相关内容,这次继续学习的时候本想从栈开始学习了,因为感觉线性表那章的内容已经会了。但是当他说对栈操作的时候说到,栈也是一种线性表,忽然发现线性表全然没有印象。因为笔者不是计算机专业的,对数据结构这么抽象的一门学科学习来说,太困难了。我想学习方法也是很重要的一方面。本着我对学习的一个习惯就是看教材的目录。于是我们从最基本的“找关系”来学习数据结构。笔记记录的有时候有点天马行空,但是我希望当有人看到或者我自己温习的时候还是有点帮助的。

目录:

线性表的定义

线性表的抽象数据类型

顺序存储结构的插入与删除

线性表的链式存储结构

单链表的读取

单链表的插入与删除

单链表的整表创建

单链表的整表删除

单链表的结构与顺序存储结构的优缺点

静态链表

循环链表

双向链表

上述就是我学习的某本教材中关于线性表学习的目录,这时候我们来找关系:

(1)什么是线性表?-------线性表的定义

(2)数据类型就是数据类型,比如我们学的int,char都是一种数据类型,那抽象数据类型又是什么意思呢?---------线性表的抽象数据类型

(3)对一种存储结构通常进行的操作有插入(往里面放数据),删除(剔除不需要或者已用过的数据)。----------插入与删除

(4)线性表的存储结构是什么样?有哪几种?------------顺序存储结构与链式存储结构

(5)链式存储结构是否只是单一不变的如同顺序存储结构一样固定?-------------静态链表、循环链表、双向链表。

(6)只要是一种存储结构就应该有对应对其的操作,那不同的存储结构的操作方式是否相同?---------链表的操作。

问题部分是应该我们对学习一个未知知识提出的问题?通过目录其实我们就大致了解了一个内容如下:线性表是数据结构的一种,既然是一种数据结构就需要我们对他的存储结构进行一些操作,通过学习发现,线性表这种数据结构又有多种存储结构。不同的存储结构我们的操作方法又有些差别。


下面我们依次解决我们提出的问题:

(1)什么是线性表?

就如同大学里面进校园时,每个人都有一个学号,那我们一般从20140001开始算是第一个,假设一个班级是40个人,那最后一个就是20140040。

以20140001来说,他后面是20140002,但是前面没有了,那么就说他没有前驱

以20140040来说,他前面是20140039,但是后面没有了,那么就说他没有后继

以201400XY(1<xy<40)来说,他前面是201400xy-1,后面是20100xy+1,那么就说他有且只有一个前驱和后继

对于这样一个概念来说他就是一个线性表:零个或多个数据元素的有限序列。

扩展一下:上面所说的学号问题,我们需要点名册,那么就按照学号来的,但是学号这关联的还包括姓名、性别等信息。但是这一系列都是一个线性表。即:复杂的线性表,一个数据元素可以由若干数据项组成。比如说20140001这个数据元素,它可以包括:姓名、学号、性别等多个数据项。

(2)数据类型就是数据类型,比如我们学的int,char都是一种数据类型,那抽象数据类型又是什么意思呢?

其实我们处理器中已经存在了很多的数据类型,我们可以利用这些已经存在的数据类型进行“重新的组合”来形成新的结构,同样用已经实现的操作来组合新的操作。这就是所谓的抽象数据类型。

针对线性表而言,抽象数据类型定义如下:

ADT 线性表 (List)

Data 

operation

InitList(*L):初始化操作,建立一个空的线性表

ListEmpty(L):若线性表为空,返回ture,否则返回false

clearList(*L):将线性表清空

GetElem(L,i,*e):将线性表中第i个位置的元素返回给e

LocateElem(L,e):在线性表中查找与给定值e相等的元素,如果查找成功,返回该元素在表中序号表示成功;否则,返回0表示失败

ListInser(*L,i,e):在线性表中的第i个位置插入新元素e

ListDelete(*L,i,*e):删除表L中第i个位置元素,并用e返回其值

ListLength(L):返回L的元素个数

endADT


运用:实现两个线性表A和B的并集操作。即使得A=A∪B。

分析:假设有A、B两个集合,就是把存在于集合B中的但不存在A中的数据元素插入A中即可。

实现代码:

void union(List *La,List Lb)

{

int La_len,Lb_len,i;

ElemType e;

La_len = ListLength(La);

Lb_len = ListLength(Lb);

for(i=1;i<Lb_len;i++)

{

GetElem(Lb,i,e);

if(!LocateElem(La,e,equal))

ListInsert(La,++La_len,e);

}

}

具体实现




3、线性表的存储结构

线性表有两种物理结构:顺序结构就是其中一种

顺序存储结构:用一段地址连续的存储单元依次存储线性表的数据元素。

在C语言中用一维数组来实现顺序存储结构。

关键点:起始位置、最大存储量

则顺序结构代码:

#define MAXSIZE 20

typedef int ElemType;

typedef struct

{

ElemType data[MAXSIZE];

int length;

}SqList


0 0
原创粉丝点击