我的数据结构思考--理解线性结构

 前面已经理解了,数据结构研究的目的是处理非数值问题在计算机中的处理。这一来将引出两个问题:

一:从计算机需要处理的问题的角度抽象非数值问题中数据元素的固有逻辑关系。

二:如何将数据元素之间固有的逻辑关系恰当地映射到计算机中,以便于处理。这也称为物理存储结构。

 

问题一:

从计算机需要处理的问题的角度抽象非数值问题中数据元素的固有逻辑关系。

在“何为数据结构”一篇中提到了抽象的概念,并且说明了抽象的角度取决于分析问题的目的。数据结构是一门研究非数值计算的程序设计问题中计算机的操作对象(数据元素)以及它们之间的关系和运算等的学科。从该角度可以抽象出两个模型:

线性模型:数据元素之间存在着简单“一对一”的线性关系,如通讯录问题。

非线模型:数据元素之间存在着“一对多”(树)或“多对多”(图)的关系。

 

以上两个模型是非数值处理问题中数据元素之间固有的逻辑关系。

 

问题二:

如何将数据元素之间固有的逻辑关系恰当地映射到计算机中,以便于处理。这也称为物理存储结构。

如何将数据元素之间固有的逻辑关系映射到计算机物理结构上,以便于计算机的处理或者说是高效处理,这是数据结构研究的核心问题,是我在以后学习中为之努力的地方。

 

我的思考:

经过分析后发现:计算机的物理存储结构也是一种“线性”的结构。计算机的存储单元是依次序来摆放的(访问),也就是说地址空间是连续的,线性的。那么我们是否可以将现实问题的线性关系简单地映射到计算机存储结构的线性关系上呢?回答应该是肯定的,由此引出了第一种线性结构的物理表示:

顺序表

我的数据结构思考--理解线性结构_第1张图片
由此我们可以总结出:通过顺序表结构,我们只需向计算机申请一段内存来存放数据元素。然后我们就可以处理数据元素了。

顺序表 = 指针(指向一段内存)

ElemType *elem

稍作观察我们发现,这样简单的映射后,物理存储结构可以随机访问的特点,也映射到了顺序表上。由此我们总结出顺序表的优点:随机访问

 

以后我们需要做的工作是将此结构进一步的细化,以便适应更多的突发情况。诸如:如果申请的这一段内存用完了怎么办?插入,删除元素应该怎么办?所以必须让计算机知道何时内存已经用完,必须申请新空间,自己目前有多少个元素。以及插入,删除元素应该怎么调整结构等。

下面附调整后的顺序表的结构:

#difine LIST_INIT_SIZE 100

#define LISTINCREMENT

typedef struct{

ElemType *elem ; //指向一段内存的指针

Int length ;

Int listsize ;

}

 

 

 

你可能感兴趣的:(数据结构,数据结构,存储,struct,通讯,list,工作)