对于数据结构与算法的学习,我相信不管是新手还是老手,都会对“逻辑结构、存储结构”产生很多的疑问。你可能觉得不就是两个简单的概念嘛,早就了然于胸了。
Wait!
先不要急着下定论,我们还是先来看一道题目。实践是检验真理的唯一标准嘛!(萌新略过)
选哪个呢?是不是很纠结?有答案了没?
别急,我们再来看一道题。
如果这两道题你觉得very easy,那么接下来的内容,恭喜你,不必再看了;如果仍然觉得哪里有问题,以及不敢确定自己的答案,还是来跟着我过一遍知识吧,在阅读的过程中,思考上面的两个问题。
注:以上例题来源于王道:《数据结构与算法》
你应该知道,数据结构的三要素是:逻辑结构、存储结构、数据运算。
首先我们来回答一个问题:什么是逻辑结构呢?
从定义的角度来说,所谓逻辑结构,指的就是数据之间的逻辑关系,从逻辑关系上来描述数据。逻辑结构又包括线性结构和非线性结构两种,线性表是一种典型的线性结构,图是一种典型的非线性结构,特别注意:逻辑结构与存储结构无关。
看了定义是不是觉得非常混乱?
那么,你觉得什么是逻辑上的关系呢?我们来思考这个问题:”顺序表是逻辑结构吗?“
如果你认为,”线性表是一种线性结构,顺序表是属于线性表的,所以,顺序表应该是一种逻辑结构。“
很不幸,这种想法是非常错误的!!!
所以,我们在判断逻辑关系的时候,不要想当然,不要你觉得,应该理性判断。
我们可以认为逻辑结构是一种”依赖关系“,描述的仅仅是数据元素之间的关系,除了描述数据元素之间的关系外,再也没有其他的含义了。
比如,我们回顾刚刚的问题,”顺序表是逻辑结构吗?“
答案:不是。虽然顺序表是一种线性结构,但是你要注意,顺序表背后包含着”顺序存储的意思“。也就是说,顺序表既能够描述逻辑结构,也能够描述物理结构。所以,这是一种混合类型。
再来,”有序表是逻辑结构吗?“
显然,是的。有序表指的是数据元素按照一定顺序排列的线性表,除了描述“两个元素之间有序”的依赖关系以外,它再也没有别的意思了。
所以,你是不是能够体会到逻辑结构的独特之处了?
总结一下,逻辑结构指的就是数据元素之间的关系,这种关系可以是如下的几种:
最后,如果让你判断一个名词是否为逻辑结构,我们应该怎么做?可以考虑以下几点:
存储结构就非常好理解了,存储结构,也被称作是物理结构,表述的是含有某种逻辑关系的元素在计算机中存储的方式。可以理解为数据元素在存储器上的排列方式。
总的来说,存储结构只有四种,分别是顺序存储、链式存储、索引存储、散列存储(哈希存储)。
回过头来,我们看文章开头的第二个问题:
A选项,循环队列,实际上是用数组实现的,也就是顺序存储;B选项,链表,很明显,这是一种链式存储;C选项,哈希表,这已经是明示了——哈希存储;最后一个,栈是一种很重要的逻辑结构,既能够用顺序存储实现也能够由链式存储实现。所以,答案就是D。
存储结构的核心是:只有这四种,我要我觉得,再也没有其他的可能了。