連続構造と連鎖構造をストーリーで説明する

一生懸命勉強し、毎日改善する

この記事は私のGithubリポジトリDayDayUPに含まれています:github.com/RobodLee/DayDayUP、ウェルカムスター

⭐⭐⭐⭐⭐blog.csdn.net 转载请注明出处:/weixin_4346…

序文

今学期は情報技術を教える授業があります。つまり、各学生がデータ構造の章を割り当てて、それについて話す段階になります。シーケンシャル構造とチェーン構造の内容を割り当てられましたが、面白くするために短編小説を作り、アニメを作りました。かなり気持ちいいです。アニメは久しぶりですが、一生懸命作ったストーリーやアニメを無駄にしないために、この記事を水の記事でシェアします。

コンピュータメモリ

シーケンシャル構造であろうとチェーン構造であろうと、データがメモリに格納される方法の説明です。したがって、これら2つのデータ構造を理解するには、まずコンピュータのメモリを導入する必要があります。

上の図では、図の各行は1つ存储单元であり、複数のストレージユニットで構成されています存储体各ストレージユニットは字选线、対応する1つに接続されてい内存地址ます。

たとえば、メモリアドレスが0のメモリユニットのデータが読み取られます。最初に、CPUがアドレスバスを介してアドレス情報をMARに送信し、次にMARがアドレスをデコーダに送信します。デコーダは、アドレスを通る対応するワード選択ライン、そして対応するストレージユニットに1つの信号を与えます。最後に、ストレージユニット内のバイナリデータは、データライン(緑色のライン)を介してMDRに送信できます。このようにして、データの読み取り操作が完了します。書き込み操作の場合は、読み取り/書き込み制御ラインを介して読み取りまたは書き込みのどちらを制御するかを制御するだけで済みます。書き込みの場合は、MDR内のデータが送信されます。データラインを介して対応するストレージユニットに接続します。

これらはコンピュータ構成の原理に関する知識です。それを学んでいない人はそれをよく理解していないかもしれません。それは問題ではありません。ここで1つの概念を知ってください。つまり、コンピュータメモリは複数のストレージユニットで構成されています。各ストレージユニットには、コンピュータが指定されたメモリアドレスでストレージユニットに対して読み取り/書き込みできる一意の番号(メモリアドレス)があります

これは、コンピュータのメモリはホテルと見なすことができ、各部屋はストレージユニットであり、部屋番号はメモリアドレスに対応し、部屋のテナントはメモリに保存されたデータです。

シーケンシャル構造

シーケンシャル構造を紹介する前に、少し話をしましょう。

ある日、祖父がひょうたんの赤ちゃん7人と一緒に街にやって来ました。

私たちは観光のためにここにいるので、通りで眠ることができないので、おじいちゃんとひょうたんは最初に滞在するホテルを見つけようとしています。おじいちゃんは一度に7つのコネクテッドルームを開いて、7人のひょうたんの赤ちゃんを一人ずつ住まわせました。

写真からわかるように、7つの部屋が隣り合っているので、7人のひょうたんの赤ちゃんも1人ずつ自分の部屋に住んでいます。このようなものはシーケンシャル構造です。

シーケンシャル構造。これは、各データ要素が、コンピューター内の連続したアドレスを持つストレージユニットのグループに順番に格納されることを意味します。この記憶方法では、論理的に隣接している2つの要素もコンピュータメモリ内で隣接しています

シーケンス構造は配列に対応しているため、上記の例をコードで表す方法は次のとおりです。

コードでは、サイズ7の配列が新しいキーワードで開かれます。これは、おじいちゃんが7つの部屋を開き、配列に7つのデータを格納することに相当します。これは、それぞれの部屋に住む7人のひょうたんの赤ちゃんに相当します。

チェーン構造

シーケンス構造を紹介した後、チェーン構造を紹介しましょう。または、上記の話を続けてください。

このホテルにしばらく滞在した後、ひょうたんの子供たちは少し不快に感じ、変えたいと思いました。しかし、おじいちゃんは考えました:私がここにとてもよく住んでいるなら、なぜ私は変わるべきですか?しかし、私はこれらの小さなものを打ち負かすことができないので、私はそれらに頼ることしかできません。結局、私の祖父は比較的強いですが、2つの拳は14の手を打ち負かすことはできません、、、

然后他们就收拾东西来到了一家新的宾馆。

由于这家宾馆生意比较好,住的人有点多,没有连在一起的七个房间了,爷爷索性就让他们随便住了,挑自己喜欢的房间住。

等住完了之后爷爷心里想:这几个小娃娃怎么住的这么分散,要是弄丢了可怎么搞,不得心疼死我呀。

于是乎,爷爷就找到了前台小姐姐,找她要了七张小纸条。

然后爷爷将七张小纸条分给了葫芦娃们,然后他们每个人都在小纸条上记着下一个葫芦娃的房间号。这样虽然几个葫芦娃都不住在一起,但是通过纸条上的房间号就可以依次找到下一个葫芦娃的房间。这样从大娃开始,就可以找到所有的葫芦娃了。

链式结构的特点是存储各个数据元素的计算机存储单元的地址不一定是连续的,但是在逻辑上相邻的。每个结点都包含数据域指针域两部分。

故事中所表示的就是链式结构。我们再来思考一个问题,现在通过纸条可以找到下一个葫芦娃的房间,但是怎么找到上一个呢?好像不可以,稍微做一下修改,比如现在每个葫芦娃手上有两张纸条,另一张纸条上记录的是上一个葫芦娃的房间号。

其实这个就是双链表,每个结点都有两个指针,分别指向上一个结点与下一个结点。

所以说,数据结构研究的就是数据如何在内存中存储。尽管数据结构有多种,但是数据都是在内存中存放的,只不过约束条件不同,概念就有所区别。不管是栈、队列等简单一点的数据结构,还是树、图等复杂一点的数据结构,他们的实现方式无非就三种:顺序存储、链式存储、顺序存储+链式存储。

拓展

最后,我们再来拓展一个知识点,就是如何用顺序结构和链式结构来实现栈。

栈是一种只能从栈顶存放数据和取出数据的数据结构。不能从栈底对元素进行操作。

如果采用顺序结构实现,可以准备一个数组,规定数组起始位置为栈底,靠近末尾一侧为栈顶。那么添加和取出元素就只能从末尾一侧进行操作了。

typedef struct {
    ElemType data[MaxSize];     //用于存放数据
    int top;                    //指向栈顶
} SqStack;
复制代码

チェーン構造に置き換えられた場合。次に、ヘッダーがスタックの一番下で、テールがスタックの一番上であることを指定します。次に、テーブルの最後からのみ要素を追加または削除できます。ヘッダーがスタックの一番上で、テーブルのテールがスタックの一番下であることが逆に指定されている場合、とにかく、スタックの定義に準拠して、一方の端からのみ操作できます。

typedef struct StackNode {
    ElemType data;
    struct StackNode *next;
} *LinkStack;
复制代码

要約する

データ構造を研究することは、データがメモリにどのように格納されるかを研究することです。新しいデータ構造を学習するとき、最初にその定義を理解し、次にその実装とメモリに格納する方法を考えるのは簡単です。

書くのは簡単ではありません、読んだ後にそれを好きになることを忘れないでください~~~~

⭐⭐⭐⭐⭐blog.csdn.net 转载请注明出处:/weixin_4346…

この記事は私のGithubリポジトリDayDayUPに含まれています:github.com/RobodLee/DayDayUP、ウェルカムスター

記事が悪くないと思われる場合は、1つください点赞、、收藏关注

プログラミングの知識をさらに学ぶには、公式アカウントに注意して『 R o b o d 』ください。

おすすめ

転載: juejin.im/post/7082758443886444580