Category Archive: Struktur Data

Feb 15 2011

Struktur Data Antrian

Struktur data antrian (queue) merupakan pengembangan dari struktur data list bertaut (linked list). Bagian terkecil dari struktur data antrian adalah sebuah node (yang juga merupakan struktur data) yang menampung dua elemen, yaitu (1) data yang disimpan dan (2) pointer ke node selanjutnya.

Ide implementasinya sebagai berikut.

Pada saat inisialisasi, siapkan tempat yang kita sebut node kepala. Node kepala akan berisi node awal dari antrian yang kita buat.

Pada saat menambahkan node yang berisi data ke dalam antrian (istilahnya enqueue), periksa isi node kepala. Jika masih kosong, tempatkan node tersebut di sana. Jika sudah berisi, lakukan iterasi mulai dari node kepala, node di belakang kepala, node di belakangnya, dan seterusnya sampai menemukan tempat kosong. Letakkan node di tempat kosong tersebut.

Pada saat mengeluarkan node dari dalam antrian (istilahnya dequeue), terlebih dulu periksa isi node kepala. Jika masih kosong, berarti tidak ada data yang akan dikeluarkan. Jika sudah berisi, keluarkan node kepala. Kemudian jadikan node di belakang kepala tadi sebagai node kepala yang baru.

Jika ingin melihat keseluruhan antrian, lakukan iterasi mulai dari node kepala, node di belakang kepala, node di belakangnya, dan seterusnya sampai node yang paling belakang.

Read the rest of this entry »

  • Facebook
  • Twitter
  • Delicious
  • Digg
  • Google Buzz
  • StumbleUpon
  • Add to favorites
  • Email
  • RSS

Permanent link to this article: http://www.muhammadalvin.net/2011/02/struktur-data-antrian/

Des 15 2009

Program Pascal tentang Binary Tree

(Dipindahkan dari note Facebook Program Pascal utk m’input data integer/karakter ke binary tree)

uses crt;

type
    tree = ^struct_tree;
    struct_tree = record
        ada_data: boolean;
        data: integer; (* kalo input data karakter, ganti jadi char *)
        kiri, kanan: tree;
    end;

var
    akar: tree;
    i, q: integer;
    input: integer; (* kalo input data karakter, ganti jadi char *)
    baru: tree;
    tmp: tree;
    cari: boolean;

(* kalo input data karakter, ganti n: integer jadi n: char *)
procedure insert_to_tree(n: integer; akar: tree);
begin
    if akar^.ada_data = false then
    begin
        akar^.data := n;
        akar^.ada_data := true;
    end
    else
    begin
        new(baru);
        baru^.ada_data := true;
        baru^.data := n;
        baru^.kiri := nil;
        baru^.kanan := nil;

        new(tmp);
        tmp := akar;
        cari := true;
        while cari do
        begin
            if input < tmp^.data then
            begin
                if tmp^.kiri = nil then
                begin
                    tmp^.kiri := baru;
                    tmp^.ada_data := true;
                    cari := false;
                end
                else
                begin
                    tmp := tmp^.kiri;
                end;
            end
            else
            begin
                if tmp^.kanan = nil then
                begin
                    tmp^.kanan := baru;
                    tmp^.ada_data := true;
                    cari := false;
                end
                else
                begin
                    tmp := tmp^.kanan;
                end;
            end;
        end;
    end;
end;

procedure tampil_preorder(node: tree);
begin
    if (node^.ada_data) then
    begin
        write(node^.data, ' ');
    end;

    if (node^.kiri nil) then
    begin
        tampil_preorder(node^.kiri);
    end;

    if (node^.kanan nil) then
    begin
        tampil_preorder(node^.kanan);
    end;
end;

procedure tampil_inorder(node: tree);
begin
    if (node^.kiri nil) then
    begin
        tampil_inorder(node^.kiri);
    end;

    if (node^.ada_data) then
    begin
        write(node^.data, ' ');
    end;

    if (node^.kanan nil) then
    begin
        tampil_inorder(node^.kanan);
    end;
end;

procedure tampil_postorder(node: tree);
begin
    if (node^.kiri nil) then
    begin
        tampil_postorder(node^.kiri);
    end;

    if (node^.kanan nil) then
    begin
        tampil_postorder(node^.kanan);
    end;

    if (node^.ada_data) then
    begin
        write(node^.data, ' ');
    end;
end;

begin
    clrscr;

    writeln('--[ tree ]--');

    (* inisialisasi akar pohon *)
    new(akar);
    akar^.ada_data := false;
    akar^.kiri := nil;
    akar^.kanan := nil;

    (* baca input Q, lalu lakukan perulangan sebanyak Q kali *)
    write('Q = '); readln(q);
    for i := 1 to q do
    begin
        write('integer ke-', i, ' = ');
        readln(input);

        insert_to_tree(input, akar);
    end;

    writeln;
    writeln;

    (* tampilkan secara preorder, inorder, postorder *);
    writeln('traverse secara pre-order');
    tampil_preorder(akar);

    writeln;
    writeln;

    writeln('traverse secara in-order');
    tampil_inorder(akar);

    writeln;
    writeln;

    writeln('traverse secara post-order');
    tampil_postorder(akar);

    writeln;
    writeln;

    writeln('Tekan ENTER untuk keluar . . . ');
    readln;
end.

  • Facebook
  • Twitter
  • Delicious
  • Digg
  • Google Buzz
  • StumbleUpon
  • Add to favorites
  • Email
  • RSS

Permanent link to this article: http://www.muhammadalvin.net/2009/12/program-pascal-binary-tree/