ad-1. 連結リスト
1
金子邦彦
(C 言語によるアルゴリズムとデータ構造)(全6回)
URL: https://www.kkaneko.jp/pro/ad/index.html
連結リストの概念と構造の理解、C言語による実装と操
作(挿入・削除)の習得
【学習内容の構成】
1. リストの基本概念:順序のあるデータの集まりで、
要素の挿入・削除によりサイズが増減するデータ構
造
2. 配列によるリストと連結リストの比較:操作ごとの
処理速度の違いと使い分け
3. 連結リストの構造:要素を格納するセルと次のレ
コードを指すポインタで構成
4. 実習:C Tutorを用いた連結リストの作成、要素の末
尾への追加・削除の実践
• 前提:C言語の基本文法、ポインタの理解
• 意義:動的なデータ管理手法の習得、メモリ効率を考
慮したプログラム設計能力の向上
2
1-1. 連結リスト
3
• 順序のあるデータ
• 要素の削除,挿入によりサイズが増減する
リストの性質
4
リストの組み立て,要素の挿入,要素の削除
5
リストの組み立て
要素の挿入
4を挿入
要素の削除
8を削除
リストの種類
処理
配列によるリス
ト
連結リスト
要素の末尾への追加 高速 高速
要素の末尾以外への追
加
低速 高速
要素の末尾からの削除 高速 高速
要素の末尾以外からの
追加
低速 高速
添え字による要素アク
セス
高速 低速
・「高速」,「低速」は,配列によるリスト,連結リストを
比べたとき,どちらが相対的に早いかの傾向を示すもの
・連結リストでの要素の追加,削除は,追加,削除すべき
レコードのアドレスが分かっているものとする
6
• 配列によるリスト
あらかじめ,ある程度の長さの配列を作り,
その中にリストを格納するもの
• 連結リスト
データを格納するためのメモリを挿入のたびに確
保.そして,削除のたびに解放.
7
連結リストとは
レコードを次の2つで構成
• 要素を格納するセル
• リスト中の次のレコードを指すポインタを格納す
るセル
8
1-2. 「リスト」を実習できる
オンラインサイトの紹介
9
10
リストとは,順序の付いたデータの並び
「リスト」を実習できる
オンラインサイトの紹介
パソコン演習
① Chrome ウェブブラウザを起動する
② 次の URL を開く
https://visualgo.net/ja
③ 「連結リスト」をクリック
11
パソコン演習
④ 説明が出る.ESC キーを押して,説明を消す
⑤ 左下のメニューで「入れる」をクリックし,
「i = N (After tail), specify v =」を選ぶ
12
パソコン演習
⑥ 値が「80」のように表示されるので,確認した
ら「行く」をクリック
⑦ 末尾にデータが増えるので,確認する
13
1-3. 実習
14
実習の指示
• 資料:15~24
• C Tutor に関する次のことを理解
しマスターする
• C Tutor の起動手順
• C Tutor の画面構成
• C Tutor は,オンラインのプログ
ラム開発環境であること
15
実習
① ウェブブラウザを起動する
② C Tutor を使いたいので,次の URL を開く
http://www.pythontutor.com/
※ Internet Explorer でうまく動かない場合がある
→ うまく動かないときは Google Chrome を試してください
※ 途中で「Server Busy・・・」というメッセージが出るこ
とがある.
→ 混雑している.少し(数秒から数十秒)待つと自動で表示
が変わる(変わらない場合には,操作をもう一度行ってみ
る)
※ 日本語モードはない.英語で使う
16
③ 「C Tutor」をクリック
17
18
「C (gcc4.8, C11)」になっている
エディタ
実行のためのボタン
最初から main メソッドの
ひな形が入っている
実習の指示
• 資料:19~24
• 次のことを理解しマスターする
• 連結リストの作成
• 要素の末尾への追加
• 要素の末尾からの削除
19
連結リストの作成
① 次のプログラムを使う
20
②「Visualize Execution」をクリック.
「Last」をクリック.
結果を確認する.
「Edit this code」をクリックして戻る
21
実行結果
22
レコード
レコード
レコード
③ 次のようにプログラムを書き換えて,実行し,
結果を確認しなさい.要素を末尾に挿入している
23
④ 次のようにプログラムを書き換えて,実行し,
結果を確認しなさい.要素を末尾に挿入している
24
課題
次のリストを作成しなさい
25