第3章 データ構造とプログラミング
この章のねらい コンピュータは、データを「どんな形(構造)でメモリに並べるか」と「どんな手順(アルゴリズム)で処理するか」の 組み合わせで動いています。この章では、その2つ――データ構造とアルゴリズム――の基本、 それを実際に書くためのプログラミング言語、そしてWebで使うマークアップ言語までを、ひとまとめに学びます。 プログラムを書いたことがなくても大丈夫。試験に出るのは「言葉の意味」と「性質の違い」がほとんどです。
過去問での出方:経営情報システムの第3問〜第6問あたり(前半のプログラミング分野)で、 ほぼ毎年どれかが出ます。特に「スタックとキュー(LIFO/FIFO)」「ソートと探索の性質」 「オブジェクト指向の用語(継承・カプセル化・多態性)」「Web言語の役割分担」は超頻出です。 用語を正しく紐づけできれば得点源。暗記中心なので、取りこぼしを減らせば安定して稼げる分野です。
3-0 この章の地図
この章は「データをどう並べるか」→「どんな手順で処理するか」→「何の言葉で書くか」という順に進みます。 全体像を先に押さえておきましょう。
3-1 データ構造 … 配列/スタック(LIFO)/キュー(FIFO)/リスト/木・2分木
│ (データを「どんな形」でメモリに置くか)
▼
3-2 アルゴリズム … ソート(並べ替え)/探索(さがす)/逆ポーランド記法/計算量
│ (そのデータを「どんな手順」で処理するか)
▼
3-3 プログラミング言語 … 低水準/高水準・コンパイラ/インタプリタ・オブジェクト指向
│ (手順を「何の言葉」で書くか)
▼
3-4 マークアップ言語 … HTML/XML/JSON(データや文書の「見た目・構造」を記述)
- データ構造(3-1)とアルゴリズム(3-2)はセットです。「どの構造を選ぶか」で「使える手順」が決まります。
- 3-3・3-4は言葉(言語)の話。役割の違い(クライアント側かサーバ側か、など)が問われます。
3-1 基本的なデータ構造
そもそも「データ構造」とは
データ構造とは、たくさんのデータをコンピュータのメモリの中でどんな形に並べて管理するかの型(かた)のことです。 同じデータでも、並べ方を工夫すると「探しやすい」「出し入れが速い」などの利点が生まれます。 まずは基本の5つ――配列・スタック・キュー・リスト・木――を押さえます。
① 配列(はいれつ/array)
配列は、同じ種類のデータを連続した箱に順番に並べたもっとも基本的な構造です。 それぞれの箱には添字(そえじ/インデックス、0番・1番…)という番号がついていて、 番号を指定すればどの位置でも一瞬で取り出せる(=ランダムアクセスできる)のが強みです。
添字: 0 1 2 3 4
┌─────┬─────┬─────┬─────┬─────┐
配列 │ 田中 │ 佐藤 │ 鈴木 │ 高橋 │ 伊藤 │
└─────┴─────┴─────┴─────┴─────┘
↑ 「2番を見せて」と言えば即『鈴木』が取れる
- 一次元配列:上のような1列の並び。
- 二次元配列:行と列のある表(マトリクス)。社員表のように「氏名・年齢・住所…」と項目が複数ある表も、 二次元配列で扱えます。ただし一次元配列でも工夫すれば処理できます(各社員を1つのまとまり=レコードにして並べる、 項目ごとに別々の一次元配列を持つ、など)。「一次元では処理できないから二次元を使う」は言い過ぎ=誤りです(→ H21 第4問…実際はH21 第5問)。
⚠️ つまずきポイント:並べ替えると元の順に戻せなくなる 配列を年齢などの1項目で並べ替え(ソート)すると、入力した順の情報を別に持っていない限り、 もとの並び順に戻せなくなることがあります。もとの順を保ちたいときは、データ本体はそのままにして、 別に「表示順を示すリスト(索引・ポインタ列)」を用意して、それをたどって表示する、という手が使えます。
📝 過去問はこう出る(H21 第5問) 配列に入れた社員表データの操作で「最も不適切なもの」を選ぶ問題。 正解(=不適切)は「社員表は一次元配列では処理できないので二次元配列を利用する」。 一次元配列でもレコードや項目別配列で処理できるので、この断定が誤りです。 なお「二分探索をするなら事前に並べ替えが必要」「別にリスト構造を設ければ元の順を変えずに任意順で表示できる」は正しい選択肢でした。 → H21 第5問
② スタック(stack)=LIFO(後入れ先出し)
スタックは、データを積み上げていって、いちばん上(最後に入れたもの)から取り出す構造です。 このルールをLIFO(Last In First Out:ラスト・イン・ファースト・アウト=後入れ先出し)と呼びます。
イメージは「積み重ねた本」や「バネ式のトレイ」。最後に載せた本を最初に取りますね。
【スタック=LIFO】
┌──────┐ ← ③を最後に入れた → ③を最初に取り出す
push│ ③ │ pop
→ ├──────┤ →
│ ② │
├──────┤
│ ① │ ← ①は最初に入れた → 最後に取り出される
└──────┘
入れる操作=push、取り出す操作=pop
- 用途:関数呼び出しの管理(呼んだ順と逆に戻る)、逆ポーランド記法の計算(→ 3-2)、 ブラウザやアプリの「元に戻す(Undo)」など。
③ キュー(queue)=FIFO(先入れ先出し)
キューは、先に入れたものから先に取り出す構造です。 このルールをFIFO(First In First Out:ファースト・イン・ファースト・アウト=先入れ先出し)と呼びます。
イメージは「行列(待ち行列)」。先に並んだ人から順にさばかれます。
【キュー=FIFO】
入れる(enqueue) 取り出す(dequeue)
→ ┌───┬───┬───┬───┐ →
│ ① │ ② │ ③ │ ④ │
└───┴───┴───┴───┘
↑最初に入れた①が最初に出る
- 用途:早く入庫した商品から先に出荷する在庫管理シミュレーション、印刷の順番待ち、 各種の順番処理など。
💡 覚え方:スタックとキューの区別 - スタック=LIFO(後入れ先出し)… 「積む」から、上(最後)から取る - キュー=FIFO(先入れ先出し)… 「行列(Queue)」だから、先頭(最初)から出る 迷ったら「行列=先に並んだ人が先(FIFO=キュー)」を軸にすると、もう一方がスタック(LIFO)と決まります。
📝 過去問はこう出る(H25 第5問) データ構造と処理方式の対応を空欄で埋める問題。 「早く納品された商品から先に出荷する」シミュレーション=キューを使う=FIFO。 「四則計算で値を順に記憶し、後から取り出して計算する」=スタック=LIFO。 正解の組み合わせは「A:キュー/B:FIFO/C:スタック/D:LIFO」でした。 → H25 第5問
④ リスト(連結リスト/linked list)
リスト(連結リスト)は、データ(値)と次のデータの位置を指し示す「ポインタ(矢印)」を セットにして、数珠つなぎにした構造です。
┌────┬──┐ ┌────┬──┐ ┌────┬──┐
│ 田中 │ ●─┼──▶│ 佐藤 │ ●─┼──▶│ 鈴木 │ / │(終わり)
└────┴──┘ └────┴──┘ └────┴──┘
値 次への矢印
- 配列との違い:
- 配列は箱が連続しているので添字で一発アクセスできるが、途中への挿入・削除は大移動が必要で不得意。
- リストは矢印のつなぎ替えだけで途中に挿入・削除ができて得意。ただし先頭からたどるので、 n番目に行くには順に手繰る必要があり、位置指定のアクセスは苦手。
- 前の項目(H21 第5問)で出た「項目ごとにリスト構造を設けて表示順を変える」は、この仕組みの応用です。
⑤ 木構造(tree)と2分木(binary tree)
木構造は、データを枝分かれする階層で表す構造です。いちばん上を根(root/ルート)、 枝分かれの各点を節(ノード)、末端を葉(リーフ)と呼びます(木を逆さにした形をイメージします)。 フォルダ(ディレクトリ)の入れ子や、組織図などが木構造の例です。
2分木(にぶんぎ)は、各ノードから出る枝が最大2本に限られた木のことです。
[根]
50
/ \
30 70 ← 各ノードから枝は最大2本=2分木
/ \ / \
20 40 60 80
- 2分探索木:「左の子は自分より小さい/右の子は自分より大きい」というルールで並べた2分木。 これを使うと、大小をたどって効率よく目的の値を探せる(探索は3-2で扱います)。
- 木構造は、後の章で学ぶデータベースの索引(インデックス)やファイルの階層構造の土台にもなります。
3-2 アルゴリズム
「アルゴリズム」とは
アルゴリズムとは、ある問題を解くための手順・段取りのことです。同じ「並べ替える」「さがす」でも、 手順の違いで速さ(実行時間)や手間が変わります。試験では、代表的な手順の名前と性質が問われます。
ソート(並べ替え)
データを小さい順(または大きい順)に並べ替える手順をソートと呼びます。代表的なものは次の2つです。
| ソート名 | やり方(ざっくり) | 特徴 |
|---|---|---|
| 選択ソート | 未整列の中から最小(最大)値を見つけて先頭と交換。以下、残りに同じ手順を繰り返す | 交換回数は少なめ |
| バブルソート | 先頭から隣り合う2つを比べ、逆順なら交換を最後まで。これを繰り返す | 隣接交換を繰り返すため比較・交換回数が多く、実行時間が大きくなりやすい |
⚠️ つまずきポイント:どちらが「遅い(時間がかかる)」か バブルソートは隣り合うデータの交換を何度も繰り返すため、選択ソートより比較・交換の回数が多く、実行時間が大きくなりやすい、 という点がよく問われます。名前とやり方(「隣を比べて交換」=バブル)を結びつけて覚えましょう。
探索(さがす)
たくさんのデータから目的の1つをさがす手順が探索です。基本は次の3つです。
| 探索名 | やり方 | 前提・特徴 |
|---|---|---|
| 線形探索(リニアサーチ) | 先頭から順番に1つずつ照合していく | 並べ替え不要だが、データが多いと遅い |
| 二分探索(バイナリサーチ) | 中央のデータと比較し、目的が前か後ろかを判定して範囲を半分に絞るを繰り返す | あらかじめ整列(ソート)済みであることが前提。速い |
| ハッシュ法 | キーを計算式(ハッシュ関数)に通して格納場所を直接求める | 原理的に高速。ただし衝突(コリジョン)への対処が必要 |
- 二分探索の急所:事前に並べ替え(整列)が必要。バラバラのデータには使えません。
- ハッシュ法の急所:異なるキーがたまたま同じ場所を指してしまう「衝突」が起こり得るので、 ハッシュの仕組みには衝突が生じた際の処理を組み込む必要があります(「誤差の処理」ではありません)。
📝 過去問はこう出る(H26 第5問) ソートと探索の性質を空欄で問う問題。 ①「最小値を見つけて先頭と交換」=選択ソート、②「隣を比べて逆順なら交換」=バブルソートで、 交換・比較が多く時間がかかるのはバブルソート(②)。 「中央と比較して範囲を半分に絞る」探索=二分探索法で、これには順序よく並べたデータが必要。 ハッシュ法には衝突が生じた際の処理を組み込む――が正解でした。 → H26 第5問
逆ポーランド記法(後置記法)とスタック
私たちが普段書く「2 + 3」のように、演算子(+)を数字の間に置く書き方を中置記法といいます。 これに対し、演算子を数字の後ろに置く書き方を逆ポーランド記法(後置記法)と呼びます。
- 中置記法:
2 + 3 - 逆ポーランド記法:
2 3 +
なぜこの書き方をするのか:逆ポーランド記法はカッコが不要になり、スタック(LIFO)を使って機械的に計算できるからです。 コンピュータにとって扱いやすいのがポイントです。
計算のしくみ(スタックを使う):
式 「2 3 +」 を左から読む
① 2 を読む → スタックに積む スタック: [2]
② 3 を読む → スタックに積む スタック: [2, 3]
③ + を読む → 上2つ(3と2)を取り出し 2+3=5 を積む スタック: [5]
→ 答え 5
このように「数字はスタックに積み、演算子が来たら上から2つ取り出して計算」を繰り返すだけで答えが出ます。 H25 第5問で「四則計算の値を配列(スタック)に順に記憶し、後から取り出して計算する=LIFO」と出たのは、 まさにこの逆ポーランド記法的な処理のことです。
計算量(オーダー)
計算量(オーダー)は、「データの件数nが増えたとき、処理の手間(時間)がどれくらいの勢いで増えるか」を表す目安です。
O( )(オーダー記法)で書きます。数式そのものより、「速い/遅い」の大小関係を押さえれば十分です。
| 表記 | 意味(nが増えたときの伸び方) | 例 |
|---|---|---|
| O(1) | 件数が増えても手間は一定(いちばん速い) | 配列の添字アクセス、ハッシュ法(理想時) |
| O(log n) | 件数が増えても手間はごくゆるやかに増える(速い) | 二分探索 |
| O(n) | 件数に比例して増える | 線形探索 |
| O(n²) | 件数の2乗で増える(遅くなりやすい) | バブルソート・選択ソート |
- 速い順に並べると:O(1) < O(log n) < O(n) < O(n²)。
- 「二分探索は O(log n) で線形探索 O(n) より速い」「単純なソートは O(n²) で件数が多いと不利」―― この大小のイメージを持っておくと選択肢の判断が早くなります。
3-3 プログラミング言語とオブジェクト指向
低水準言語と高水準言語
プログラムを書く「言葉」には、機械に近いものと人間に近いものがあります。
| 区分 | 説明 | 例 |
|---|---|---|
| 低水準言語 | 機械(CPU)に近い言語。処理は速いが人間には読み書きしにくい | 機械語(0と1)、アセンブラ言語 |
| 高水準言語 | 人間に近い言語。読み書きしやすく、機種に依存しにくい | C、Java、Python、COBOL、FORTRAN など |
- 機械語:CPUが直接実行できる0と1の命令。
- アセンブラ言語:機械語とほぼ1対1で対応する低水準言語。人間が少し読める形にしたもの。 アセンブラ言語を機械語に翻訳するソフトをアセンブラと呼びます。
📝 過去問はこう出る(H19 第4問) プログラム言語の空欄補充。 「アセンブラ言語は機械語と対で対応する低水準言語」「これを機械語に翻訳するソフトがアセンブラ」 「Javaの中間コードは特定のCPUに依存せず実行できる」「Perlはテキスト処理に使うインタプリタ型言語」 ――がすべて成立する組み合わせが正解でした。 → H19 第4問
コンパイラとインタプリタ(翻訳のしかた)
人間が書いたプログラム(ソースプログラム)は、そのままではCPUが実行できません。 機械語へ翻訳する必要があり、その方式に2種類あります。
| 方式 | やり方 | たとえ | 特徴 |
|---|---|---|---|
| コンパイラ型 | 実行前にプログラム全体をまとめて機械語に翻訳してから動かす | 本を全部訳してから渡す | 実行が速い。翻訳(コンパイル)の手間がかかる。例:C |
| インタプリタ型 | 1行ずつ翻訳しながら実行する | 通訳が逐次訳す | 手軽・修正しやすい。実行はやや遅い。例:Perl、(従来の)Python など |
- Javaの独特なしくみ:Javaはソースを一度中間コード(バイトコード)にコンパイルし、 それを各機種のJVM(Java仮想マシン)が実行します。だから特定のCPUに依存せず、 「一度書けばどこでも動く(Write Once, Run Anywhere)」が実現できます(→ H19 第4問、H20 第6問)。
主なプログラミング言語の特徴(暗記ポイント)
言語の「出自・用途」を取り違える選択肢が頻出です。次の対応を押さえましょう。
| 言語 | ひとことで | 注意(引っかけ) |
|---|---|---|
| COBOL | 事務処理(業務計算)用の手続き型言語 | 「科学技術計算用」はFORTRAN(取り違え注意) |
| FORTRAN | 科学技術計算用の言語 | ― |
| Perl | テキスト処理に強いインタプリタ型言語(CGIでよく使われた) | ― |
| Java | JVM上で動くオブジェクト指向言語。CPUに依存しない | JavaScriptとは別物 |
| JavaScript | HTMLに埋め込み、ブラウザ(クライアント側)で動く言語 | Javaのサブセットではない(名前が似るだけ) |
| Python | 機械学習・データ分析で人気の言語 | LISPと互換ではない |
| R | 統計解析向けの言語。オープンソースで無償 | ― |
| Ruby | 日本人(まつもとゆきひろ氏)が開発したオブジェクト指向言語。JIS/ISO規格化 | テキストベース(ノーコードではない) |
| PHP | サーバ側で動き、DB連携のWebページ作成に使う | クライアント側ではない |
📝 過去問はこう出る(H23 第3問・R04 第3問) H23 第3問:言語の説明で正しいのは「XMLはデータ交換に使う言語で、データベース開発にも利用される」。 「COBOLは科学技術計算用」(→事務処理用が正)、「HTMLはSGMLの元」(→逆。HTMLがSGMLをもとに作られた)は誤り。 R04 第3問:正しいのは「Rは統計解析向けでオープンソース」。 「JavaScriptはJavaのサブセット」「Perlが日本人開発でISO規格(→正しくはRuby)」「PythonはLISPと互換」「Rubyはノーコード」はすべて誤りでした。 → H23 第3問 / R04 第3問
データ型(変数の「入れ物の種類」)
プログラムで値を入れておく箱を変数、その箱に入れるデータの種類をデータ型と呼びます (整数型・浮動小数点型・文字型など)。データ型の決め方は、内部表現・演算の精度・速度に影響します。
- 整数型と浮動小数点型(小数を扱う型)では、2進数での内部での格納形式が違い、演算の精度や速度が変わります。
- 小数は内部で2進数の浮動小数点として近似されるため、丸め誤差が生じます。 データ型を上手に選んでも、この誤差を完全には取り除けません。
- 配列で宣言した変数の格納場所は、原則主記憶(メモリ)上に確保されます(外部記憶ではありません)。
📝 過去問はこう出る(H29 第6問) データ型定義の記述で正しいのは「数値を格納する変数のデータ型を定義すれば、(2)進数による内部表現が区別され、演算の精度や速度にも影響が出る」。 「適切な型を選べば演算誤差を取り除ける」(→近似ゆえ取り除けない)、「配列の格納領域は外部記憶に確保」(→主記憶)は誤りでした。 → H29 第6問
オブジェクト指向
オブジェクト指向は、プログラムを「データ(状態)と、それを扱う手続き(機能)をひとまとめにした部品=オブジェクト」の 集まりとして組み立てる考え方です。現実世界を「モノ(オブジェクト)」の観点でモデル化します。まず用語を整理します。
| 用語 | 意味(かみくだき) |
|---|---|
| オブジェクト | データ(状態)と手続き(機能)を1つにまとめた部品 |
| メソッド | オブジェクトが持つ手続き(機能)。オブジェクトにできる操作 |
| メッセージ | 他のオブジェクトへの仕事の依頼。これを受け取るとメソッドが起動する |
| クラス | 類似のオブジェクトをまとめた設計図(型)。似たオブジェクトの集まり |
| インスタンス | クラスから作られた実体(具体的な1個のオブジェクト)。クラスから実体を作ることをインスタンス化という |
そのうえで、オブジェクト指向の三大特徴が最重要です。
| 特徴 | 意味 | ひとことで |
|---|---|---|
| カプセル化(情報隠蔽) | データと手続きを一体化し、内部を外部から隠す。決められた窓口(メソッド)経由でのみ使わせる | 中身を隠して守る |
| 継承(インヘリタンス) | 下位クラス(サブクラス)が上位クラス(スーパークラス)の属性・機能を引き継ぐ | 親の性質を子が受け継ぐ |
| 多態性(ポリモーフィズム/多相性) | 同じメッセージ(操作)でも、オブジェクトの型に応じて異なる振る舞いをする | 同じ命令で相手により動きが変わる |
⚠️ 混同注意:似た用語の取り違えが引っかけの定番 - カプセル化=「隠す」。<混同されやすい>インスタンス化(実体を作る)/オーバーライド(下位で機能を再定義する)とは別物。 - 多態性(多相性)=「同じ操作で振る舞いが変わる」。<混同されやすい>動的型付け(実行時に代入値で型が決まる仕組み)とは別物。 - オーバーライド=上位クラスの機能を下位クラスで再定義すること。これを「カプセル化」と説明するのは誤り。
📝 過去問はこう出る(R06 第3問・R02 第3問) R06 第3問:正しいのは「継承は、下位クラスが上位クラスの属性と機能を引き継ぐ仕組み」だけ。 「多相性=実行時に値で型が決まる」(→動的型付けの説明)、「インスタンス化=外部から隠蔽」(→カプセル化の説明)、 「カプセル化=下位で再定義」(→オーバーライドの説明)は、いずれも別用語とのすり替えでバツ。 R02 第3問:オブジェクトを機能と状態で定義し、手続きをメソッド、それを起動する依頼をメッセージ、 類似オブジェクトの集まりをクラス――が正解の組み合わせでした(カプセル化は「集まり」ではないので誤り)。 → R06 第3問 / R02 第3問
3-4 マークアップ言語
マークアップ言語とは
マークアップ言語は、文書の中にタグ(<...>)という目印を書き込んで、
「ここは見出し」「ここは表」などの構造や意味・見た目を示すための言語です。
プログラミング言語(手順を書く)とは目的が違い、データや文書の構造を記述するのが役割です。
おおもとにはSGMLという言語があり、そこからHTMLが作られました(順序に注意:SGML → HTML)。
HTML(Webページを記述する)
HTML(HyperText Markup Language)は、Webページの中身と構造を記述するマークアップ言語です。 リンク(ハイパーテキスト)で他のページへ飛べるのが特徴です。
- HTMLは「プログラム」ではなくマークアップ言語。サーバで計算処理されるのではなく、 ソースがクライアント(ブラウザ)に送られて、ブラウザが解釈・表示します(→ H20 第6問)。
- 見た目(フォント・文字サイズ・行間・配置など)の指定は、HTML本体ではなくCSSという別の言語で定義します(→ H30 第6問)。
XML(データ交換のための言語)
XML(eXtensible Markup Language)は、タグを自分で自由に定義できるマークアップ言語です。 「拡張可能(extensible)」の名のとおり、用途に合わせてタグを作れます。
- 用途:ネットワーク上でのデータ交換、システム間の連携、XMLデータベースなど。
- HTMLが「見せる(表示)」寄りなのに対し、XMLは「データの構造・意味を表す」寄り、と押さえると区別しやすいです。
<社員>
<氏名>田中太郎</氏名>
<年齢>35</年齢>
<部署>営業部</部署>
</社員>
JSON(軽量なデータ交換フォーマット)
JSON(JavaScript Object Notation)は、データを「名前:値」のセットで表す、 軽量なデータ交換フォーマットです。もとはJavaScript由来ですが、今では言語を問わず広く使われ、 Webのデータのやり取り(API)で定番になっています。XMLよりも記述が簡潔なのが特徴です。
{
"氏名": "田中太郎",
"年齢": 35,
"部署": "営業部"
}
- XMLとJSONはどちらもデータ交換に使えるが、JSONの方がタグが少なく軽い。用途で使い分けます。
💡 Web技術の「役割分担」を1枚で Webページは複数の言語を組み合わせて作ります。役割の取り違えが頻出です。 | 技術 | 役割 | 動く場所 | |---|---|---| | HTML | ページの構造・中身 | クライアント(ブラウザ) | | CSS | 見た目(フォント・行間・配置など) | クライアント | | JavaScript | HTML内に書き、動きをつける(動的化) | クライアント | | Ajax | サーバと非同期通信し、ページの一部だけを更新する技術 | クライアント⇄サーバ | | PHP | DB連携などサーバ側の処理 | サーバ |
📝 過去問はこう出る(H20 第6問・H30 第6問) H20 第6問:Web言語の処理形態で正しいのは「JavaScriptはソースがそのままクライアントに送られブラウザで実行」と 「PHPはサーバ側で実行し、DBへ問い合わせて結果を返す」の2つ。 「HTMLがサーバ上で処理される」(→ブラウザが表示)、「Javaアプレットは機械語にして送る」(→中間コード=バイトコード)は誤り。 H30 第6問:①動的化=JavaScript、②DB連携=PHP、③非同期通信で一部更新=Ajax、④表示方法の定義=CSS が正解の組み合わせ。 → H20 第6問 / H30 第6問
この章のまとめ(試験直前チェック)
- ☐ 配列=連続した箱+添字で一発アクセス。一次元でも工夫すれば表データも扱える(「二次元でないと処理できない」は誤り)
- ☐ スタック=LIFO(後入れ先出し・積み重ね)/キュー=FIFO(先入れ先出し・行列)――逆にしない
- ☐ リスト=ポインタで数珠つなぎ。挿入・削除が得意/位置指定アクセスは苦手(配列は逆)
- ☐ 木構造(根・節・葉)/2分木は枝が最大2本。2分探索木は探索に強い
- ☐ ソート:バブルソートは比較・交換が多く遅くなりやすい(選択ソートと対比)
- ☐ 探索:二分探索は事前の整列が必須(O(log n))/線形探索はO(n)/ハッシュ法は衝突の処理が要る
- ☐ 逆ポーランド記法(後置記法)はカッコ不要でスタックを使って計算できる
- ☐ 計算量の速い順:O(1) < O(log n) < O(n) < O(n²)
- ☐ 低水準(機械語・アセンブラ)/高水準、コンパイラ(全体翻訳)/インタプリタ(逐次翻訳)
- ☐ Javaは中間コード(バイトコード)をJVMで実行=CPUに依存しない
- ☐ 言語の取り違え注意:COBOL=事務/FORTRAN=科学技術、R=統計・OSS、Ruby=日本人開発・規格化、JavaScript≠Javaのサブセット
- ☐ データ型:整数型/浮動小数点型で内部表現・精度・速度が変わる。小数は近似ゆえ丸め誤差は消せない
- ☐ オブジェクト指向の三大特徴=カプセル化(隠す)/継承(引き継ぐ)/多態性(同じ操作で振る舞いが変わる)
- ☐ 用語すり替え注意:カプセル化⇔インスタンス化⇔オーバーライド/多態性⇔動的型付け
- ☐ HTMLはマークアップ言語(ブラウザが表示)/XML=タグ自由・データ交換/JSON=軽量なデータ交換
- ☐ Web役割分担:HTML=構造/CSS=見た目/JavaScript=動き/Ajax=非同期一部更新/PHP=サーバ側DB連携
この章に対応する主な過去問
| 年度・問 | 論点 | リンク |
|---|---|---|
| H19 第4問 | プログラム言語(アセンブラ・Java・低水準/インタプリタ) | 問題 |
| H20 第6問 | Web言語の処理形態(クライアント側/サーバ側) | 問題 |
| H21 第5問 | 配列データの操作・二分探索・リスト構造 | 問題 |
| H23 第3問 | プログラミング言語・マークアップ言語の特徴 | 問題 |
| H25 第5問 | データ構造(キュー/スタック・FIFO/LIFO) | 問題 |
| H26 第5問 | アルゴリズム(ソート・二分探索・ハッシュ) | 問題 |
| H29 第6問 | データ型定義(内部表現・精度・誤差) | 問題 |
| H30 第6問 | Web開発の言語(JavaScript/PHP/Ajax/CSS) | 問題 |
| R02 第3問 | オブジェクト指向のモデル化(メソッド・メッセージ・クラス) | 問題 |
| R04 第3問 | プログラミング言語(R・Ruby・Python 等) | 問題 |
| R06 第3問 | オブジェクト指向(継承・カプセル化・多態性) | 問題 |
次章予告 ▶ 第4章「ソフトウェアとオペレーティングシステム(OS)」 本章で「プログラムを書く言葉」を学びました。次章では、そのプログラムを動かす土台である OS(基本ソフトウェア)の役割――タスク管理・記憶管理(仮想記憶)・ファイル管理――や、 ミドルウェア、各種ソフトウェアの分類を扱います。