back

データ構造


◆基本データ構造
 基本データ型

   

整数型 int,longなど
実数型 floatなど
文字型 charなど
論理型 andなど
列挙型  
部分型  
ポインタ型 アドレスを持つ

 構造型

  ・配列型

  ・レコード型

 抽象データ型
  データ構造とデータ操作を一体化したもの。


◆リスト構造

 単方向リスト:次のデータのポインタだけもつ

 双方向リスト:前と次のデータのポインタを持つ

 環状リスト:環状につながっている


◆スタック
 LIFO(last-in first-out)型
 再帰呼び出し、サブルーチン呼び出し、データ退避などに使われる

◆キュー
 FIFO(first-in first-out)型
 ジョブ待ち、タクス待ち行列に使われる

木構造
 データ項目間の関係を木(ツリー)に例えて表現した 

       ○ →節、根
     /\ →枝
    ○  ○ →節
   /\   \
  ○   ○   ○ →節、葉

◆ニ分木
  子が二つ以下の木構造

◆完全ニ分木
  木構造で左右の枝の数が同じもの


★★★宿題:二種向け★(2000/2/7)

 FIFO(First-In First-Out)の処理に適したデータ構造はどれか。

 ア 2分木

 イ キュー

 ウ スタック

 エ ヒープ


■解答■
  二種午前平成11年秋問13

> 前にキューの問題がこの宿題メールででたとき、どなたか
> 「キューはところてんをきゅーっと押して、先から出るイメージ」
> とおっしゃっていたのを覚えています。

 どうもありがとうございました。

>メッセージキューイング:
>処理のメッセージ(電文)を到着順に蓄積し、処理する

 どうもありがとうございました。

> 先入れ先出し=>順番に処理。
> プリンタの印刷処理=プリントキュ−

 どうもありがとうございました。

>FIFO:先入れ先出し。
>      サービスや処理を受けるために、待ち行列(queue)があるとき、最初に
>      入ってきたものから処理する方法。
>FILO:先入れ後出し。
>      後入れ先出し。
>      サービスや処理を受けるためにスタックがあるとき、最も後から入った
>      ものからサービスや処理をする方法。
>
>ア 2分木:木構造のひとつ。
>           根(ルート)と呼ばれる根幹となる端点から二つ以下の枝が出る
>           もの。
>           各端点は節と呼ばれ、枝が0の端点は葉と呼ばれる。
>イ キュー:フィルム・磁気テープなどのある部分にいれておく信号。
>ウ スタック:後入れ先出し(LIFO)のデータ構造。
>エ ヒープ:ツリー構造を持ったデータ構造の一種。
>           ヒープを利用した並べ替えのアルゴリズムは「ヒープ・ソート」と
>           呼ばれる。
>
>参考:「合格情報処理2月号付録 情報システム辞典」
>      「五反田コレクション( http://www.imagica.com/dic/ )」
>      「MioCity コンピュータ用語小辞典
>       ( http://www.big.or.jp/%7Emio/ga/index.html )」

 どうもありがとうございました。


★★★宿題:二種向け★(2000/5/19)

 2 分木を入力するためのテキスト表現を,次のように規定した。図のように節
に番号をつけたとき,テキスト表現として正しいものはどれか。

(テキスト表現)
 (1) (左部分木の節番号又はテキスト表現,節番号,右部分木の節番号又はテ
   キスト表現)と表す。
 (2) 部分木が空のときは x を書く。

        3
       ●
      / \
     /   \
    2●     ●5
   /     / \
  /     /   \
 1●     4●     ●6

 ア ((1,2),3,(4,5,6))

 イ ((1,2,3),x,(4,5,6))

 ウ ((1,2,x),3,(4,5,6))

 エ ((1,2,x),3,(6,5,4)


(解答例)

問題を素直に読めば解けます。

(左部分木の節番号又はテキスト表現,節番号,右部分木の節番号又はテ
   キスト表現)と表す。だから、まず、左の部分を見ます。
  (1,2,x)
      ↑
部分木が空のときは x を書く

次ぎに、右の部分
  (4,5,6)

そして、全体を見る。

(1,2,x),3,(4,5,6)

■解答■(宿題メールより)
  二種午前平成12年春問14

>    3
>   ●
>  / \
> /   \
>2●    ●5
>まず、この部分だけを取り出して考えます。
>このテキスト表現は(2,3,5)です。
>
>◎(2,3,5)
>   ̄
>   2●
>  /
>  /
>1●
>この部分は左部分木に1番の節があって右部分木が空の状態です。
>よってテキスト表現は(1,2、x)となります。
>
>◎(2,3,5)
>       ̄
>   ●5
>  / \
> /   \
>4●    ●6
>この部分は左部分木に4番の節があって右部分木に6番の節があります。
>よってテキスト表現は(4,5,6)となります。
>
>まとめると
>((1,2,x),3,(4,5,6))
>となります。

 どうもありがとうございました。


★★★宿題:二種(基本情報技術者)向け★(2000/9/7)

 次の式を逆ポーランド表記法で表現したものはどれか。

(A + B)×(C + D)
────────
   A − D

 ア AB + CD +× AD −÷

 イ AB + CD + AD −×÷

 ウ ABCD ++× AD −÷

 エ ABCD ++÷ AD −×


上の式を逆ポーランド表記法に直しやすく括弧でくくります。

((A+B)×(C+D))÷(A−D)
=((AB+)×(CD+))÷(AD−)
=(AB+CD+×)÷(AD−)
=AB+CD+×AD−÷

という形になるかな?
中の括弧から処理していくことが鉄則ですね。

次ぎに元に戻して見ましょう。

AB+CD+×AD−÷
=((A+B)(C+D)×)((A−D)÷)
=((A+B)×(C+D))((A−D)÷)
=((A+B)×(C+D))(÷(A−D))
=((A+B)×(C+D))÷(A−D)

となります。

■解答■(宿題メールより)
  ネットワークスペシャリスト午前平成11年問42

>  (逆)ポーランド表記法って,このような情報処理の試験ではよく見ますが,
> 実際に役立つとは思えぬのだが.そんなこと聞くのは,禁句?

 どんどん質問して下さい。禁句ではないですよ。
 これは,基本的な処理ですからね。勉強しておきましょう。

>こういう表記方で、どういったメリットがあるのですか?

 コンピュータが内部で使ってます。HPなどの関数電卓で,人間が手で入れて
計算することもありますよ。

>逆ポーランド表記法( reverse Polish notation ):
> FortranやCOBOLなどのソースプログラムをコンパイルする際に行う算術式
>を機械語に変換する過程では,加減算より乗除算を優先するなどの演算子の
>優先順位を考慮して,構文を明らかにする。スタックを利用した簡明な算術
>式の内部表現法を逆ポーランド表記法という。この表記法では,加減乗除な
>どの演算子をオペランドの後に置く。例えば,
> (1)AとBを加え,その和にCを乗じることを,AB + C * と書く。
> (2)括弧のある場合には,次のように書く。
>    X = ( A + B ) * ( C - D ) は XAB + CD -* =
> この表記法は,ポーランドの論理学者 J.Lukasiewicz が使用したもので,
>括弧なしで数式を表現できる。そのため,算術式の評価が単純に行える。後
>置表記法ともいう。
>
>学研「合格情報処理」付録 「情報システム辞典」(p50)より 一部抜粋

 どうもありがとうございました。

>逆ポーランド表記法(後置表記法)〜
>普通の式では、演算子は被演算子と被演算子の間に書くが、逆ポーランド表記法
>では、演算子を最後に書くことにより、括弧が不要になり、コンパイラ等で演算
>処理する場合にスタックを使って簡単に計算が可能になる。
>http://www002.tokai.or.jp/k-sakamoto/kiso.htm

 どうもありがとうございました。カッコが要らなくなるのは,画期的なテクニック
であると感動しました。(20年ほど前)(^^);

> http://www.abplus.com/palmware/ksan_rpn.html

 どうもありがとうございました。