Sabtu, 06 Juni 2009

StruktuR Data Modul 05

Lawlietsan

http://lawlietsan.co.cc/

MODUL 5

STACK ( Tumpukan )

 

-à Adalah tumpulan data yang seolah-olah ada data di atas data lain.

-à Suatu metode untuk Input dan hapus di dalam memori komputer.

 

Konsep utama dalam STACK adalah LIFO ( Last In First Out ).

 

Data nomor 1 datang/masuk duluan, data nomor 5 yang paling atas yang keluar terlebih dahulu.

 

Algoritma:

  1. Input/tambah data
    • Jika ada input maka no stack/no tumpukan yang semula 0 akan tambah 1 demi 1 sampai maksimal tumpukan.

 

  1. Pengambilan data

·        Jika ada pengambilan data maka data dipindahkan di variabel lain contohnya temp. Dan posisi tumpukannya yang semula maksimal akan berkurang 1 demi 1 sampai posisi 0 kembali.

 

  1. Deklarasi STACK

 

Type

            Const

            Max = 5;

Nama record = Record

                        Data    : type data;

                        Top      : byte;

            End;

            Nama_array = ARRAY [1..max] of Nama record;

Var

            STACK : nama Array;

 

 

Nama Array-----à Barang

Nama Record---à Coba

Nama Variabel--à Stack

 

Contoh Deklarasi dari gambar diatas:

 

Type

            Coba = record

            Data    :string;

            Top      : byte;

            End;

Barang = ARRAY [1..4] of coba;

Var

            Stack:barang;

 

  1. Operasi pada STACK

·        CREATE

Membuat stack baru yang masih kosong.

 

Procedure create;

Begin

      Stack.top:=0;

End;

 

·        FULL

Untuk memeriksa apakah stack sudah penuh atau belum.

 

Fuction full:bolean;

Begin

      Stack.top:=max;

End;

 

·        PUSH

Menambah sebuah elemen ( data ) kedalam stack

Syarat: tidak bisa dilakukan jika stack sudah penuh.

 

Procedure push ( input:string );

Begin

      If not full then

      Begin

                  Stack.top:=stack.top;

                  Stack.data:=input;

      End;

End;

 

·        EMPTY

Fuction empty: bolean;

Begin

      Empty:=false;

      If top:=0 then empty:=true;

End;

 

·        POP

Mengambil elemen teratas dari stack.

Syarat: Stack tidak boleh kosong.

 

Procedure Pop ( elemen:string );

Begin

      If not empty then

      Begin

      Elemen:=stack.data;

      Stack.top:=top – 1;

      End;

End;

 

 

Uses wincrt;

Type

kelas = ARRAY[1..4] of string;

Var

            Stack: kelas;

            top:byte;

            Elemen: string;

            I : integer;

Begin

top:=0;

For i:=1 to 4 do

Begin

            Writeln('masukkan nama ke', '  ',i,'  ','='); readln(stack[i]);

        top:=top+1;

End;

writeln('posisi tumpukan=',top);

Writeln('pengambilan data');

For i:=1 to 4 do

Begin

Elemen:=stack[i];

            top:=top - 1;

End;

writeln;

Writeln('data elemen sekarang=',elemen);

writeln('posisi tumpukan=',top);

Readln;

End.

 

 

StruktUr Data Modul 06

Lawlietsan

http://Lawlietsan.co.cc/

MODUL 6

QUEUE ( ANTRIAN )

 

-à Kumpulan data dimana data masuk dan keluar pada ujung yang berbeda.

-à Konsep utama FIFO ( Fisrt In First Out ).

 

Data nomor 1 datang/masuk dan keluar duluan.

 

Algoritma:

  1. Input/tambah data
    • Jika ada input maka no antrian yang semula 0 akan tambah 1 demi 1 sampai maksimal antrian.

 

  1. Hapus/Pengambilan data

·        Jika ada pengambilan data maka data dipindahkan di variabel lain contohnya temp, antrian ke-dua akan maju ke antrian pertama dan seterusnya. Dan jumlah antrian yang semula maksimal akan berkurang 1 demi 1 sampai antrian 0 kembali.

 

  1. Deklarasi Queue

Type

            Const

            Max = 5;

Nama record = Record

                        Data     : type data;

                        Top      : byte;

            End;

            Nama_array = ARRAY [1..max] of Nama record;

Var

            Antri : nama Array;

Nama Array-----à Barang

Nama Record---à Coba

Nama Variabel--à Antri

 

Contoh Deklarasi dari gambar diatas:

Type

            Coba = record

            Data     :string;

            Top      : byte;

            End;

Barang = ARRAY [1..4] of coba;

Var      Antri:barang;

  1. Operasi pada queue

·        CREATE

Membuat antrian baru yang masih kosong.

 

Procedure create;

Begin

      antri.top:=0;

End;

 

·        FULL

Untuk memeriksa apakah antrian sudah penih..

 

Fuction full:bolean;

Begin

      antri.top:=max;

End;

 

·        PUSH

Menambah sebuah elemen ( data ) kedalam antrian.

Syarat: tidak bisa dilakukan jika antrian sudah penuh.

 

Procedure push ( input:string );

Begin

      If not full then

      Begin

                  antri.top:=antri.top;

                  antri.data:=input;

      End;

End;

 

·        EMPTY

Fuction empty: bolean;

Begin

      Empty:=false;

      If top:=0 then empty:=true;

End;

 

·        POP

Mengambil 1 elemen dari sebuah antrian.

Syarat: antrian tidak boleh kosong.

 

Procedure Pop ( elemen:string );

Begin

      If not empty then

      Begin

      Elemen:=antri.data;

      antri.top:=top – 1;

      End;

End;

 

 

Program antrian_1;

Uses wincrt;

Type

            Data= array [1..3] of string;

Var

            D: data;

            I, antri: integer;

            Temp: string;

Begin

Antri:=0;

{untuk input}

For I:=1 to 3 do

Begin

Writeln(’masukkan nama ke’,’  ’,i);

Readln(d[i]);

Antri:=antri+1;

End;

{untuk Output}

For I:=1 to 3 do

Begin

Temp:=d[i];

Antri:=antri-1;

End;

{lihat output di var temp setelah pengambilan }

Writeln(’hasil var temp=’,temp);

Readln;

End.

 

 

StrukTur DAta MODUL 07

MODUL 7

POINTER

 

Variabel Pointer

 

Pada materi sebelumnya telah dijelaskan mengenai variabel bertipe array, suatu tipe data yang bersifat statis (ukuran dan urutannya sudah pasti). Selain itu ruang memori yang dipakai olehnya tidak dapat dihapus bila variabel bertipe array tersebut sudah tidak digunakan lagi pada saat program dijalankan. Untuk memecahkan masalah diatas, kita dapat menggunakan variabel pointer. Tipe data pointer bersifat dinamis, variabel akan dialokasikan hanya pada saat dibutuhkan dan sesudah tidak dibutuhkan dapat dialokasikan kembali.

 

Array vs Pointer

Berikut tabel di bawah ini diberikan perbedaan antara variabel bertipe array dengan varibel bertipe pointer.

Bentuk umum :

            Var : <^tipedata>

Contoh :

            Var

                Jumlahdata   : ^integer;

                Namasiswa   :^string[25];

              Nilaisiswa       :^real;

Pendeklarasian variabel pointer tidak jauh berbeda dengan pendeklarasian variabel biasa, hanya perlu ditambahan simbol topi (^) sebelum tipe datanya. Simbol topi tersebut menandahkan bahwa variabel tersebut menunjuk ke lokasi tertentu pada memori.

            Anda juga dapat membuat variabel pointer bertipe record yang anda definisikan sendiri. Pendeklarasiannya adalah seperti berikut ini.

Bentuk umum :

            Tipe

                        = <^namarecord>;

                        =  record

                                                      :;

                                                       :;

                                                               

                                                                :;

                                                            end;

            Var

                        :; 

contoh :

Type 

            PointMhs = ^RecMhs;

            RecMhs   = record

                                     Nama : string[25];

                                     NIM   : string[10];

                                     Alm    : string[30];

                                     IPK     : real;

                                    End;

var

            datamahasiswa : pointMhs;

 


Varibel Biasa vs Variabel Pointer

 Variabel Pointer adalah suatu variabel yang menunjuk ke alamat memori yang digunakan untuk menampung data yang akan diproses, seperti digambarkan dibawah ini:





 

Single Linked List

            Apabila setiap kali anda ingin menambahkan data selalu dengan menggunakan variabel pointer yang baru, anda akan membutuhkan banyak sekali variabel pointer(penunjuk).

            Oleh karena itu ada baiknya jika anda hanya menggunakan satu variabel pointer saja untuk menyimpan banyak data dengan metode yang kita sebut Linked List. Jika diterjemahkan, maka berarti suatu daftar isi yang saling berhubungan. Untuk lebih jelasnya perhatikan gambar di bawah ini :


Pada gambar diatas tampak bahwa sebuah data terletak pada sebuah lokasi memory area. Tempat yang disediakan pada suatu area memory tertentu untuk menyimpan data dikenal dengan sebutan node/simpul. Pada setiap node memiliki pointer(penunjuk) yang menunjuk ke simpul berikutnya sehingga terbentuk suatu untaian dan dengan demikian hanya diperlukan sebuah variabel pointer. Susunan berupa untaian semacam ini disebut Single Linked List. (ket: Nill tak memiliki nilai apapun. Biasanya linked list pada titik akhirnya akan menunjuk ke Nill).

            Dalam pembuatan single linked list dapat menggunakan 2 metode :

v     LIFO (Last In First Out), aplikasi       : Stack(Tumpukan).

v     FIFO (First In First Out), aplikasi      : Queue(Antrian).

 

 

 

LIFO (Last In First Out)

LIFO adalah suatu metode pembuatan linked list, dimana data yang masuk paling akhir adalah data yang keluar paling awal. Hal ini dapat dianalogikan (dalam kehidupan sehari-hari) pada saat anda menumpuk barang, seperti digambarkan di bawah ini :


(keadaan mula-mula

a dalah kosong)


Pembuatan sebuah simpul dalam suatu linked list seperti digambarkan diatas disebut dengan istilah INSERT. Jika linked list dibuat dengan metode LIFO, maka terjadi penambahan/insert simpul di belakang.

 

PROSEDURE INSERT

Istilah insert berarti menambahkan sebuah simpul baru ke dalam suatu linked list. Berikut di bawah ini adalah penggalan listing prosecure insert untuk LIFO berserta contoh dan penjelasan cara kerjanya.

Type

 Point     = ^RecPoint;

 Recpoint = Record

                        Isi        : TipeData;

                        Next    : Point;

                   End;

Var

 Head, Tail, Now : Point;

 

 

 

Penggalan deklarasi tipe data dan variabel di atas ini akan dipakai pada penjelasan procedure-procedure selanjutnya.

 

Procedure INSERT(elemen:TipeData);

Var Now : Point;

 Begin

  New(Now);

  Now^.Isi:=elemen;

  If Head=Nil then

            Now^.Next:=Nil;

  Else

            Now^.Next:=Head;

  Head:=Now;

End;

 



untitle

Satu kata yang terucap Mengguncang gelora hati Satu Kata yang kau ucap Gemuruh hati tanpa henti Kau ucap kata perih untukku Tak dapat...