ぼんさい塾

ぼんさいノートと補遺に関する素材や注釈です.ミスが多いので初稿から1週間を経た重要な修正のみ最終更新日を残しています.

Java のプログラム (8)

2011-09-03 21:14:55 | 暮らし
記事一覧
06/05 変更.


P23-1/2: アクセス修飾子 (Tree.java のリスト)
//-------------------------------------------
package lib;
class Node {
    int data; // 重複無効
    Node l, r;
    Node(int k){data = k; l = r = null;}
}
public class TreeS {
    Node top;
    public TreeS(int k) {top = new Node(k);}
    public void search(int k){
        Node p = top.r;
        while(p != null){
            if(p.data < k) p = p.r;
            else if(p.data > k) p = p.l;
            else break;
        }
        if(p != null) System.out.println(k);
        else System.out.println("?");
    }
    public void insert(int k) {
        Node p, q;
        q = top; p = top.r;
        while(p != null){
            q = p;
            if(p.data < k) p = p.r;
            else if(p.data > k) p = p.l;
            else return; // 重複無効化
        }
        p = new Node(k);
        if(q.data < k || q == top) q.r = p;
        else if(q.data != k) q.l = p;
    }
    public void delete(int k) {
        Node p, q1, q2, q3;
        q1 = top; p = q1.r;
        while(p.data != k){
            q1 = p;
            if(p.data < k) p = p.r;
            else p = p.l;
            if(p == null) return; // k 不在
        }
        if((p.l == null) || (p.r == null)){
            if(p.l != null) q2 = p.l;
            else q2 = p.r;
            if(q1.l == p) q1.l = q2;
            else q1.r = q2;
        } else {
            q2 = p.r; q3 = q2;
            while(q3.l != null){
                q2 = q3; q3 = q3.l;
            }
            p.data = q3.data;
            if(q3 == q2) p.r = q2.r;
            else q2.l = q3.r;
        }
    }
    public void show(String s, Node p){
        if(p == null) return;
        show(s+"L", p.l);
        System.out.println(s+":  "+p.data);
        show(s+"R", p.r);
    }
    public void show(){show(" ", top.r);}
}
//-------------------------------------------


 
派生プログラムの説明の前に,準備として P22 を P23 の
ように書き換えます.とりあえず,これを実行すると P22
と同じ出力が得られることを確認してください.
N.B. progCpp.pdf (2011-06-23) の注記参照.

書き換えの趣旨はクラス TreeS と Main を別のファイルに
することです.Cでは分割コンパイル時に extrn を使いま
したが,Java の場合は public を使います.(C++ と同
様に)アクセス修飾子には public,protected,private 
があります.

P23-2/2: アクセス修飾子 (Main.java のリスト)
//-------------------------------------------
package chk;
import lib.TreeS.*;
public class Main {
    public static void main(String[] args) {
        lib.TreeS t = new lib.TreeS(0);
        t.insert(7); t.insert(3); t.insert(9);
        t.insert(2); t.insert(5);
        t.show(); t.search(3);
        t.delete(3); t.show(); t.search(3);
        t.insert(3); t.delete(5); t.show();
    }
}
//-------------------------------------------
実行結果
//-------------------------------------------
run:
 LL:  2
 L:  3
 LR:  5
 :  7
 R:  9
3
 LL:  2
 L:  5
 :  7
 R:  9
?
 L:  2
 LR:  3
 :  7
 R:  9
構築成功 (合計時間: 0 秒)
//-------------------------------------------

[2-16] Javaの文法 - Wikipedia > 4.3 アクセス修飾子 
  http://ja.wikipedia.org/wiki/Java%E3%81%AE%E6%96%87%E6%B3%95
[2-17] Java 入門 | 修飾子
  http://msugai.fc2web.com/java/modify.html
[2-18] 修飾子 - とほほのWWW入門
  http://www.tohoho-web.com/java/modifier.htm



最新の画像もっと見る

コメントを投稿