Stack, Larik dan Pointer

Slides:



Advertisements
Presentasi serupa
ARRAY.
Advertisements

ARRAY 1 DIMENSI Array 1 dimensi
Bahasa Pemrograman Lanjutan
Double Linked List.
Single linked list.
STRUKTUR DATA (7) single linked list circular
STRUKTUR DATA (8.1) double linked list non circular
Pointer. Output? #include int x = 2; void misteri(int a, int b) { a = 2*x; b = y; y = a; } main() { int y; x = 5; y = 7; misteri(x, y); printf("%d %d\n",
ALGORITMA DAN STRUKTUR DATA
Pertemuan 2 STRUKTUR DATA LINKED LIST
LINKED LIST (List linier)
LINKED LIST Single Linked List.
Linked List Pembuatan Simpul Awal.
Algoritma dan Struktur Data Daniel Riano Kaparang.
Linked List Entin Martiana.
//program untuk menulis ke dalam file teks kemudian menampilkan isi file ke layar #include Void main() { const int mak 80; file p; // deklarasi file.
ARRAY Dr. Lily Wulandari.
STACK (TUMPUKAN).
Algoritma dan Struktur Data
Pointer dalam Stack.
1 Pointer wijanarto. 2 Topik Introduction to Pointers Pointers dan Parameter Fungsi.
Algoritma & Struktur Data Pointer Evangs Mailoa.
Algoritma dan Struktur Data
PRAKTIKUM ALGORITMA DAN STRUKTUR DATA
STRUKTUR DATA (6) single linked list non circular
Operasi pada pohon biner
Single Linked List Yuliana Setiowati, S.Kom.
Alokasi Memori Yuliana Setiowati.
Searching.
Penelusuran Bab 7 Pohon Biner 219.
Algoritma & Struktur Data Linked List Evangs Mailoa.
LINKED LIST by Yohana N.
Struktur Data List Linear : Linked List (Double Linkedlist)
Algoritma dan Struktur Data
Algorithm and Data Structures.
Algoritma dan Struktur Data
Algoritma dan Struktur Data
Algoritma dan Struktur Data
Pertemuan ketujuh Struktur data st3telkom.ac.id
Struktur Data List Linear : Linked List (Single Linkedlist)
LINKED LIST.
Tenia Wahyuningrum pointers Tenia Wahyuningrum
Matakuliah : T0534/Struktur Data Tahun : 2005 Versi : September 2005
Pertemuan 7 stack jual [Valdo] Lunatik Chubby Stylus.
Algoritma dan Struktur Data
LINK LIST “Suatu cara menyimpan data dengan terstruktur sehingga programmer dapat secara otomatis menciptakan suatu tempat baru didalam memori komputer.
Pertemuan Linked list jual [Valdo] Lunatik Chubby Stylus.
Pertemuan 9 Stack dengan Linked-list
Struktur Data Linked List
STRUKTUR DATA (2) Single Linked List
STRUKTUR DATA Linked List
8. Singly Linear Linked List
Single Linked List.
Informatique Engineering Ahmad Dahlan University May 17, 2004
12. Doubly Linear Linked List
Matakuliah : T0534/Struktur Data Tahun : 2005 Versi : September 2005
REPRESENTASI FISIK LIST LINEAR
Algoritma dan Struktur Data
11. Singly Circular Linked List
Linked List BEBERAPA CONTOH SOAL 6.3 & 7.3 NESTED LOOP.
TEL 2112 Dasar Komputer & Pemograman Larik (Array)
Graf Anifuddin Azis.
Algoritma dan Struktur Data
QUEUE (ANTRIAN) Queue atau antrian didefinisikan sebagai kumpulan dari obyek-obyek yang homogen dengan operasi penambahan elemen (Enqueue) dan pengambilan.
STACK (TUMPUKAN) Stack atau tumpukan didefinisikan sebagai kumpulan dari obyek-obyek yang homogen dengan operasi penambahan dan pengambilan elemen melalui.
Contoh Aplikasi Array Sorting (Bubble Sort).
Variable Static & Linked List
Pointer.
QUEUE (Antrian).
SINGLE LINKED LIST (SLL)
Transcript presentasi:

Stack, Larik dan Pointer wijanarto

STRUKTUR DATA LARIK/ARRAY STATIS Larik/array digunakan untuk menangani data yang banyak dan bertipe sama. 1 2 3 4 n X :  X(1) X(2) X(31) X(4) X(n)

Algoritma Untuk membaca data dilakukan dengan (1) int x[10]; scanf(“%d”,jum); for (i=0;i<jum;i++) scanf(“%d”,x[i]);

Algoritma untuk membaca data dengan menghindari data yang sama (2) scanf(“%d”,&n); k=1; do scanf(“%d”,&b); ada=0; for (i=1;i<k-1;i++) if (b==x[i] ) ada =1; if (!ada){ x[k]=b; k=k+1; } else printf(“data sudah ada\n”); while (k>n)

Algoritma untuk menentukan data terbesar (max) (3) max=x[1] for (i=2;i<n;i++) if (x[i]>max) max=x[i]

Algoritma untuk menentukan data terbesar (max) dan terkecil (min) sekaligus (4) max=x[1]; min=x[1]; for (i=2;i<n;i++) if (x[i]> max)max=x[i] ;else if (x[i]<min) min=x[i];

Catatan Jika cara no 3 digunakan juga untuk menentukan data terkecil maka : untuk mencari max diperlukan (n-1) kali perbandingan untuk mencari nilai min diperlukan (n-1) kali perbandingan total perbandingan yang diperlukan untuk menentukan max dan min sekaligus adalah sebanyak (n-1)+(n-1)=2n-2 kali.

Catatan (lanj.) Sedangkan cara no 4, jumlah perbandingan yang diperlukan adalah: (n-1)<= jumlah perbandingan<=2n-2. Yang perlu dicatat adalah jika jumlah perbandingan sama dengan n-1 maka ini disebut best case atau merupakan urutan terbaik, dan jika 2n-2 adalah worst case

Stack Statis wijanarto

Definisi Stack (tumpukan) merupakan kumpulan data yang bertumpuk, artinya seolah-olah ada data yang posisinya saling tumpang tindih Dengan demikian dalam suatu stack dapat dilakukan penyisipan data, penghapusan data melalui satu pintu atau ujung.

Ilustrasi A Pertama

Ilustrasi Terakhir di Atas B A Pertama di bawah

Ilustrasi C B A Terakhir di Atas Pertama di bawah

Ilustrasi D C B A Terakhir di Atas Pertama di bawah

Ilustrasi E D C B A Terakhir di Atas Pertama di bawah

Ilustrasi Terakhir di Atas MAX_STACK Pertama di bawah top= -1 F E D C

Deskripsi Ilustrasi Posisi Tempat penampung tidak terpengaruh, walaupun di rotasi 45, -45 atau 90 derajat LIFO (Last In First Out) Yang terakhir disisipkan merupakan yang pertama kali keluar F berada pada posisi teratas (top of stack) dalam stack yang sekaligus merupakan sisipan terakhir dan data yang pertama kali dapat dikeluarkan

Macam Stack Dinamis Statis Pointer Variabel tidak fixed Array Keterbatasan jumlah yang di definisikan Tidak boleh melebihi batas maksimum Memory overflow

Stack Data Statis #define MAX_STACK 255 typedef struct STACK{ int top; int isi[MAX_STACK]; }; STACK S;

Stack Data Statis Didefinisikan sebagai array dalam record/struct Fixed Array #define MAX_STACK 255 typedef struct STACK{ int top; int isi[MAX_STACK]; }; STACK S;

Stack Data Statis MAX_STACK merupakan panjang larik yaitu 255 #define MAX_STACK 255 typedef struct STACK{ int top; int isi[MAX_STACK]; }; STACK S;

Stack Data Statis S.isi dari record stack merupakan isi dari nilai stack yang mengandung info S.top menunjukan posisi dalam stack S.top harus bilangan bulat antara 0 hingga maxdata #define MAX_STACK 255 typedef struct STACK{ int top; int isi[MAX_STACK]; }; STACK S;

Stack Data Statis #define MAX_STACK 255 typedef struct STACK{ int top; S.top=5 berarti record stack tersebut berisi 5 elemen yang terdiri dari S.isi[1], S.isi[2], S.isi[3],…, S.isi[5] Jika ada data yang diambil maka S.top dikurangi 1 menjadi 4, sehingga S.Isi[4] berada pada posisi teratas. Demikian juga jika S.top ditambah 1 menjadi 6, sehingga S.isi[6] merupakan posisi teratas dalam stack. #define MAX_STACK 255 typedef struct STACK{ int top; int isi[MAX_STACK]; }; STACK S;

Operasi Pada Stack/Tumpukan Statis Sebelum dapat di gunakan stack perlu diinisialisasi dengan nilai kosong/nol atau -1 untuk meyakinkan bahwa dalam stack tidak terdapat isi dan posisi teratas belum terisi alias kosong. void inisialisasi() /* top(S)-1; */

Variasi dalam C Stack Penuh bila top=MAX_Stack Stack Kosong bila top = -1 boolean IsFull() /* jika top(S)= MAX_STACK-1 maka ret true; selain itu ret false; */ Boolean IsEmpty() /* jika top(S)= -1 maka ret true; selain itu ret false; */

Operasi PUSH Penambahan Idenya adalah menambah field S.top dengan 1 dan mengisikan nilainya pada posisi S.top dari field Isi, S.isi[S.top]=X, dimana X adalah nilai yang diisikan. E D C B A F

Push void Push(int x,STACK S) /* jika top(S)=Maxdata maka output("Stack Penuh"); Selain itu top(S) top(S)+1; S(isi[top(S)])x ; */ S.top Di incremen 1 Assign nilai x ke S.isi pada posisi S.top

Operasi POP POP digunakan untuk menghapus elemen dari stack yang terletak pada bagian paling atas F E D C B A F

POP void POP(STACK S) /* top(S)top(S)-1 */ Bagaimana jika stack kosong (S.Top =0)????????? Apa yang akan di hilangkan ?????

POP Solusi 1 void POP(STACK S) /* jika top(S)=-1) maka output("Stack Kosong"); selain itu top(S)top(S)-1; */

POP solusi 2 (better) bolean kosong(STACK S) /* jika (top(S)=-1) maka ret true; selain itu ret false; */ Buat fungsi, utk mengecek isi stack yang mengembalikan nilai boolean void POP1(STRUCT S) /* jika (kosong(S)) maka output("Stack Kosong"); ret; selain itu top(S) top(S)-1; */

Implementasi BALIK KALIMAT Source c

Struktur data dinamis (pointer) Variabel statis merupakan suatu variable yang kedudukannya di memori bersifat tetap selama program berjalan, dan tidak dapat diubah-ubah sehingga ukuran memori yang diperlukan oleh program tersebut bersifat statis Sedangkan varibel dinamis adalah suatu variable yang dialokasikan pada saat diperlukan dan dapat dihapus saat program sedang berjalan, dengan demikian ukuran memori yang dibutuhkan oleh program bersifat dinamis.

Struktur data dinamis (pointer) Pointer merupakan struktur data yang dinamis karena variable yang di deklarasikan menunjuk pada lokasi alamat memori tertentu dalam RAM. Jadi variable pointer tidak berisi suatu nilai tetapi berisi suatu alamat memori tertentu.

Ilustrasi 568 356 500 356 A A (b) (a) Variabel A Gambar (a) merupakan variabel statis yag berisi suatu nilai statis, sedangkan variable A pada gambar (b) merupakan variable dinamis yang menunjuk pada suatu alamat tertentu (356), dimana alamat yang ditunjuk tersebut berisi nilai data 500. Nilai data yang ditunjuk ini biasanya disebut node atau simpul

Memahami pointer Variabel biasa : Variabel adalah sesuatu di dalam program yang mempunyai nama dan nilai yang di kandungnya, juga mempunyai tipe serta ukuran atau bobot int k; compiler dan linker menangani setidaknya 2 byte di memori yang menangani nilai integer dia juga mengeset table symbol

Memahami pointer Jika k=5 Ada aturan lvalue=rvalue, 5 di asosiasikan dengan k Bagaimana dengan 5=k ??? rvalue SELALU di sebelah kanan penugasan

Memahami Pointer & operator dereference Mengambil alamat suatu variabel * Operator reference Mengambil nilai dari alamat suatu variabel sumber

Deklarasi struktur data pointer typedef struct node *stack; struct node { int data; stack next; }; stack top; Tipe data baru pointer stack bertipe struct node Record node, berisi info data dan pointer ke node selanjutnya Variabel top bertipe pointer stack

Implementasi Stack Dinamis typedef struct node *stack; struct node { int data; stack next; }; stack top,bottom; Int A,B,C;

Implementasi Stack Dinamis typedef struct node *stack; struct node { int data; stack next; }; stack top,bottom; Int A,B,C; top dan bottom merupakan variable pointer yang belum menunjuk kesuatu simpul dalam hal ini diberi nilai NULL, untuk mengalokasikan node (simpul) pada variable pointer digunakan keyword malloc, sedang untuk membebaskan pointer digunakan free. top=(struct node*)malloc(sizeof(struct node)); bottom=(struct node*)malloc(sizeof(struct node)); free(top);free(bottom)

Ilustrasi typedef struct node *stack; struct node { int data; B C top bottom Bag statis typedef struct node *stack; struct node { int data; stack next; }; stack top,bottom; int A,B,C;

Stack Dinamis typedef struct node *stack; struct node { int data; stack next; }; stack top,bottom; int A,B,C; next merupakan field bertipe pointer yang menunjuk pada record node, ini disebut suatu linked list atau daftar berkait atau senarai berantai, dimana variable next menunjuk pada node selanjutnya begitu seterusnya.

Ilustrasi typedef struct node *stack; struct node { int data; top Var pointer Node/Simpul Field next NULL    / typedef struct node *stack; struct node { int data; stack next; }; stack top,bottom; int A,B,C;

Ilustrasi top=(struct node*)malloc(sizeof(struct node)); bottom=(struct node*)malloc(sizeof(struct node)); bottom Var pointer Node/Simpul Tidak bernilai Field next berisi NULL top Var pointer Node/Simpul Tidak bernilai Field next berisi NULL ? / ? /

Operasi Pointer Pada variable pointer dapat dioperasikan dengan dua cara yaitu mengkopi pointer, dan mengkopi isi dari alamat yang ditunjuk oleh pointer itu sendiri, syarat utamnya adalah bahwa operasi dapat dilakukan untuk tipe data yang sama-sama pointer.

Assign Pointer (1) (*top)->data=20; (2) bottom=top; Statemen pertama (1) adalah seperti gambar diatas, sedangkan statement kedua (2) adalah sebagai berikut : top bottom pointer / ? /

Kopi Pointer Ini disebut mengkopi pointer, sekarang perhatikan statement berikut: *top=*bottom; Hasilnya adalah seperti dibawah ini, yang disebut mengkopi isi nilai data pointer. top bottom pointer / ? / top bottom pointer / Pointer /

Hapus Pointer Untuk menghapus pointer gunakan perintah: free(top);free(bottom);

Tipe Data Dinamis typedef struct telm *addr; struct telm { int data; addr next; }elm; typedef addr stack; Contoh Alokasi addr t : t=(addr)malloc(sizeof(elm)); Contoh DeAlokasi addr t : Free(t) ;

Inisialisasi Stack void initstack(stack t) /* tNULL; */

Push Stack Dinamis void push(int x, stack t ) /* addr temp; Alokasi(temp); data(temp)x; next(temp) t; ttemp; */

Pop Satu void pop(int x,stack t) /* addr b; stack tmp; int k; b t; selama(bNULL) jika (x=data(b)) maka k x; break; selain itu b next(b); jika (k==b->data) maka output(data(t)); (x)data(t); tmp t; (t) next(t); Dealokasi(tmp); output(”x tidak ada”); */

Pop Semua ?????? void popsemua(stack *t){ struct node *b; stack temp; int k; b=(*t); if (b==NULL) { printf("Data tidak ada\n "); } else { while(b!=NULL){// Selama b tidak bernilai NULL/kosong //Alokasi Memori utk penampung sementara temp=(struct node*)malloc(sizeof(struct node)); // Copy Alamat t ke temp temp=b; //Copy Isi variabel yang akan dihapus ke k k=temp->data; // Copy Pointer Next ke temp printf("hapus data %d\n",k); b=b->Next; //Hapus var sementara free(temp); }

Display Stack Dinamis void disp(stack *t){ struct node *b; b=(*t); while(b!=NULL){ printf("%d ",b->data); b=b->next; }

Display Stack Dinamis void disp1() /* selama(topNULL) output(data(top)); top next(top); */

Implementasi Contoh Latihan Serius (hasil dikumpulkan)