データ構造(Data Structures)

データ構造(Data Structures)とは

セル(cell)の集合にある構造を与えたもの

セル(cell)とは

データを格納する基本単位(最小単位)、「要素」ともいう

ポインタ(pointer)とは

ポインタには、データのメモリ上の場所を示すアドレスが格納されている。アドレス値が入っていないポインタをヌルポインタという

ヌルポインタ(null pointer)

アドレス値0のポインタ、何もさしていない

リスト(list)

リスト(list)とは

セルが0個以上連結されたデータ構造

リストには、配列連結リストがある(注意 「リスト=連結リスト」 と説明される場合が多い)

配列(array)

データがメモリ上連続して格納されている。

連結リスト(linked list)

データがポインタによりつながっており、メモリ上はバラバラに格納されている。

 

 

連結リスト 要素(セル)へのアクセス

例 データCをアクセスする

先頭からポインタをたどってデータCをアクセスする(順番にアクセスすることからシーケンシャルアクセスという)

 

配列 要素(セル)へのアクセス

例 データCをアクセスする

要素番号(添え字)でアクセスするため、1回の命令でアクセスできる(このようなアクセスをランダムアクセスという)

連結リスト 要素(セル)の挿入と削除

例 データAとデータBの間にデータCを挿入する

プログラムではデータの数に関係なく、次の2行で処理できる

  1. データAのポインタを、データCのアドレスで置き換える
  2. データCのポインタを、データBのアドレスで置き換える

例 以下のリストからデータBを削除する

プログラムではデータの数に関係なく、次の2行で処理できる

  1. データAのポインタを、データCのアドレスで置き換える
  2. データBのポインタを、ヌルポインタで置き換える

配列 要素(セル)の挿入と削除

例 データAとデータBの間にデータFを挿入する

プログラムでは、

1.データBから後ろのデータをひとつずつ右側にずらしコピーする(ずらしコピーを行う要素の数だけ命令が実行される)

2.ずらしコピーで空いた場所に、データFを書き込む

例 データAとデータBの間にあるデータFを削除する

プログラムでは、

1.データBから後ろのデータをひとつずつ左側にずらしコピーする(ずらしコピーを行う要素の数だけ命令が実行される)

2.データFは、データBで上書きされる

連結リストの種類

連結リストには、次の3つの種類がある

  • 単方向リスト
  • 双方向リスト
  • 環状リスト

※単方向リストと双方向リストを、線形リストとよぶ

単方向リスト

データを片方にしか、たどれない連結リスト

双方向リスト

データを両方から、たどれる連結リスト

環状リスト

全要素が環状につながっているリスト

例題1 図は単方向リストを表している。“東京”がリストの先頭であり、そのポインタには次のデータのアドレスが入っている。また、“名古屋”はリストの最後であり、そのポインタには0が入っている。
アドレス150に置かれた“静岡”を、“熱海”と“浜松”の間に挿入する。

例題2 次のような双方向のポインタをもつリスト構造のデータがある。社員Gを社員Aと社員Kの間に追加する。追加後のポインタの値を埋めなさい。

追加前の双方向リストを図で書きなさい

 

追加後の双方向リストを図で書きなさい

 

確認問題

1.データ構造(Data Structures)とは、( a )の集合にある構造を与えたものである

2.セル(cell)とは、データを格納する( a )のことである。

3.( a )には、データのメモリ上の場所を示すアドレスが格納されている。

4.アドレス値が入っていないポインタを( a )という

5.セルが0個以上連結されたデータ構造を( a )という

6.リストには、( a )と( b )がある(注意 「リスト=( c )」 と説明される場合が多い)

7.配列と連結リストのパフォーマンス比較。セルへのアクセスが高速なのが( a )、セルの削除・挿入が高速なのが( b )である

8.連結リストには、( a )、( b )、( c )の3種類がある

9.単方向リストの構造を図で書きなさい

10.双方向リストの構造を図で書きなさい

11.環状リストの構造を図で書きなさい

基本情報対策問題

1.図は単方向リストを表している。“東京”がリストの先頭であり、そのポインタには次のデータのアドレスが入っている。また、“那須塩原”はリストの最後であり、そのポインタには0が入っている。
アドレス150に置かれた“小山”を、“大宮”と“宇都宮”の間に挿入する。挿入後のポインタの値を記入しなさい。

2.次のような双方向のポインタをもつリスト構造のデータがある。大宮を浦和の次に追加する場合、追加後の表のポインタを埋めなさい。