私は、データ構造が何であるあなたを依頼することです、あなたがたは、あなたがそれを言うことはありませんスタックとヒープは、ツリー図であると言われましたか?

[A]、データ構造は何ですか

序文

私は最初のデータ構造を勉強新入生が来た時に実際には、正直に言うと、データ構造は、このいずれかの以下の絵の学生だったが、言って恥ずかしいですが、理由はあまりにも多くの食べ物のC開始言語学は、そのための扉を開いたとき言い訳を作るために、あること、クラスが説明もなく競合するだろうと考え保管しないとき、私は率直になるでしょう、それは良い学校ではなく、人々は聖人ではない、実際には何も前に行うものではありません、人生は必然的に正しいに間違ったポイント、または良い時間を作るだろう子供、Meihuahaoがそれを作る前に、私は再構造データに決めたそう。

データ構造の理解

まず第一に、それはデータ構造の統一された定義から何も、標準の答えのように思える、私はまだ私の意見についての定義をよく理解して気に拾う、数冊の本を見つけました:

データ構造は、コンピュータに格納され、データが編成されています。通常の状況下では、厳選されたデータ構造、アルゴリズムの最適な効率をもたらすことができます。

あなたがデータ構造に接触しない場合は、定義がそれを読むことができます読んで?あなたがこれを読むことができるならば、私はあなたを賞賛、私はとにかくやるが、今ので何かともっと接触ではないだろう、聞くより、読み出しが理解することができます。手始めに、私が思うに、初心者には理解してみましょう、そして自分自身などの理解、公式の定義を見ている必要があり、結果が良いだろう、とにかく、私はそう思います。私はそれがデータ構造であるかを説明するために人生の例を使用します。
例:どのように棚の上に本を置くために?
言い換えれば、いくつかの棚は、あなたがそれまでの棚に入れないか、本の束があり、今がありますか?、あなたが一緒にこれらのデータを保存する方法を、あなたにいくつかのストレージスペースを与え、データの束があると述べていますか?
実際には、この質問は、以下の絵のいずれであってもよい、のようなあなたは、いわゆる本棚を見て知っていないため、非科学的です。




あなたが知っているので、誰かがあなたを尋ねられたときにどのようにデータ編成する際、実際には、両者の間のデータのこのスケールを持ちます。問題のサイズと同じではありません、それらに対処することは困難である同じではありません。エリア内難しいですか?実際には二つの操作で配置本は直接に関係しているように、で物事を行うには、あなたがそれを配置する方法を言ってますが、この本を置くことは難しいことではありませんされています。

 

オペレーティング:新しいブックどのように挿入
操作2:これを特定の本を見つける方法

方法一:我不知道你们是怎样考虑的,我第一个感觉就是随便放,随便放一个好处就是:新书怎么插入,这个操作是非常简单的,哪有空就放哪,最简单的方法就是把所有的书一本一本挨着放,所以呢,所有的新书哪里有空放哪里,So easy!放起来简单,但第二个操作怎么办,如何查找?那就会成为一件很恐怖的事……累死你!什么时候累死呢,其实如果只是一个很小的书架,倒也累不死,但如果是上面第三张那样的书城,然后你想象,里面所有的图书都是随便放的,然后有人问你,这个书城里有没有某一本书,其实那本书没有,但是你忘了有没有,那你怎么能确定它到底有没有呢?你就只好从头到尾把每一本书都过一遍,然后才能叹一口气说……唉,不好意思,没有这本书。

方法二:那我们有没有稍微聪明一点的解决方法呢?就是怎样让我找书找的方便呢?第二个方法,就是按照书名的拼音字母顺序排放,有了这个字母序以后,查找就方便多了。一个最聪明的方法是二分查找什么是二分查找:比如说现在有一长排的书放在你面前,然后我们找一本叫《数据结构》的以S开头的书,那我先从这一排的中间找一本书出来看它的书名的首字母,假如说是《离散数学》,以L开头的书,那我们知道,S在L的后面,所以《离散数学》前面的书我就不用管它了,我的查找范围缩小了一半,从L开始往后找,然后再找这一半的中间,比如找到的一本书是《网络爬虫》,以W开头的,那S在L和W中间,《网络爬虫》后面的书我就不用管了,于是我的查找范围又缩小了一半,以此类推,我可以每次都找,然后跟中间这个比,很快就会把范围缩小到一本书上,我就会知道这本书到底是有还是没有。这个方法比前面的方法聪明多了,它很好的解决了查找的问题。但是,问题又来了,新书来了怎么插入呢?它就会成为新的令人头疼的问题。比如说,我新买了一本书叫《阿Q正传》,是以A开头的,呃……惨了,那我们得把几乎所有的书往后一本一本的错位,一直到前面留出一个空挡,把新书插进去,这个似乎也很头疼。

方法三:那如何找一个两全其美的方法呢?我们来想想,图书馆里是怎样来摆书的,我们假如说去图书馆,找《数据结构》,要怎么找,你不可能是从第一本开始找,也不可能是随便中间摸一本找,你进到图书馆里,第一件事情要找的是计算机类的书在哪里对不对?图书馆里的书通常是按照书的类别来分的,比如说我们有社会科学类、文学类、艺术类、理科、工科等,然后工科下面可能还会分的再细一点,比如说我们计算机类可能就分在工科的下面,这种分法有什么好处呢?把书架划分成几块区域,每快区域指定摆放某种类别的图书,在每种类别内,按照书名的拼音字母顺序排放,这样不管我在每一个类里做什么样的操作,总归来说,图书的规模小了很多,跟整个图书馆的规模相比,我是某一类的,无论是查找还是插入,都是非常方便的。查找呢,就是在二分查找之前,我们先定一个类别,然后在一个类的一个小范围里面做二分查找,就可以更快的找到我们要查找的书了。如果是插入,也是先定类别,用二分查找来确定一下它应该被插在什么位置,然后移空位这件事可能还是要做的,但是总归比我们刚开始要移的书的数量少多了。

那现在问题又来了:

问题一:空间如何分配?
问题二:类别应该分多细?

我们分的各种类别的书,它的藏书量是不一样的,你是统一都给它分……还是每一类都多少个书架,事先分好吗?这也是一个很头疼的问题,我太难了,你如果书架给多了,就会有一些空间始终空在那浪费着,你如果书架给小了,新书来的时候要不断地加新柜子,很讨厌。还有分类别要分多细的问题,你要是分的比较粗,那么同一类里面的书就会有很多,那你的工作量还是会很大,要是想减少工作量,最好还是类别分的细一点,但是类别一分细,就会有副作用,类别太多了,图书的量一多,也是麻烦。

说这些问题是想说明:

解决问题方法的效率,跟数据的组织方式是直接相关的

那我这介绍数据结构的组织方式的时候,其实有两个概念:
、关于数据对象的逻辑结构
比如说,我们一开始把书架想象成简单的一长条,这么一层的架子,然后所有的书是一个一个挨着放的,除了一头一尾的书以外,每一本书的前面和后面都只有一本书,如果每一本书都有一个编号的话,那么这一个编号对应的就是一本书,那么这种结构是一对一的结构,我们管它叫线性结构

另外一种组织方式是上面说的第三种方法,就是先把图书分类,如果我给每一个类一个编号的话,那么这一个类别的编号里面对应着很多本书,那么这是一个一对多的逻辑结构,这个结构有个名字叫做

再说图书馆,假设我们还统计这样一些信息:这一本书都有那些人买过,买了这本书的人还买过其它的什么书,于是呢,其实是一本书对应着很多人,而一个人又对应了很多本书,这是一个多对多的、很复杂的一个关系网,那么这个关系网对应的逻辑结构叫叫做
、关于对象的物理存储结构
除了逻辑结构之外,我们还有数据对象再计算机里面的物理存储结构,也就是我们说的这些逻辑结构在机器的内存里到底要怎么放,是连续放呢还是东一个西一个隔开放呢?也就是说用一个数组来存它呢,还是用一个链表来存它呢?这个就属于物理存储结构。

此篇完

以上这些就是我对数据结构的理解,我想应该说全面了吧,要是没全面也不要紧,后面学了再继续补充。
看完有收获?那么希望老铁别吝啬你的三连击哦
1、点个推荐,让更多的人看到这篇文章
2、关注我的原创微信公众号【泰斗贤若如】,第一时间阅读我的文章
3、欢迎关注我的博客

 【原创声明】:本人原创:https://www.cnblogs.com/zyx110/

おすすめ

転載: www.cnblogs.com/zyx110/p/11800794.html