Stack larik dan pointer
Download
1 / 57

Stack, Larik dan Pointer - PowerPoint PPT Presentation


  • 238 Views
  • Uploaded on

Stack, Larik dan Pointer. wijanarto. STRUKTUR DATA LARIK/ARRAY STATIS. Larik/array digunakan untuk menangani data yang banyak dan bertipe sama. Algoritma Untuk membaca data dilakukan dengan (1). int x[10]; scanf(“%d”,jum); for (i=0;i<jum;i++) scanf(“%d”,x[i]);.

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about ' Stack, Larik dan Pointer' - snana


An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript

Struktur data larik array statis
STRUKTUR DATA LARIK/ARRAY STATIS

  • Larik/array digunakan untuk menangani data yang banyak dan bertipe sama.


Algoritma untuk membaca data dilakukan dengan 1
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
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
Algoritma untuk menentukan data terbesar (max) sama (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
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
Catatan (min) sekaligus

  • 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
Catatan (lanj.) (min) sekaligus

  • 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

Stack Statis (min) sekaligus

wijanarto


Definisi
Definisi (min) sekaligus

  • 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
Ilustrasi (min) sekaligus

Pertama


Ilustrasi1
Ilustrasi (min) sekaligus

Terakhir di Atas

Pertama di bawah


Ilustrasi2
Ilustrasi (min) sekaligus

Terakhir di Atas

Pertama di bawah


Ilustrasi3
Ilustrasi (min) sekaligus

Terakhir di Atas

Pertama di bawah


Ilustrasi4
Ilustrasi (min) sekaligus

Terakhir di Atas

Pertama di bawah


Ilustrasi5
Ilustrasi (min) sekaligus

Terakhir di Atas MAX_STACK

Pertama di bawah top= -1


Deskripsi ilustrasi
Deskripsi Ilustrasi (min) sekaligus

  • 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
Macam Stack (min) sekaligus

  • Dinamis

    • Pointer

    • Variabel tidak fixed

  • Statis

    • Array

    • Keterbatasan jumlah yang di definisikan

    • Tidak boleh melebihi batas maksimum

    • Memory overflow


Stack data statis
Stack Data Statis (min) sekaligus

#define MAX_STACK 255

typedef struct STACK{

int top;

int isi[MAX_STACK];

};

STACK S;


Stack data statis1
Stack Data Statis (min) sekaligus

  • 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 statis2
Stack Data Statis (min) sekaligus

  • MAX_STACK merupakan panjang larik yaitu 255

#define MAX_STACK 255

typedef struct STACK{

int top;

int isi[MAX_STACK];

};

STACK S;


Stack data statis3
Stack Data Statis (min) sekaligus

  • 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 statis4
Stack Data Statis (min) sekaligus

  • 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.topditambah 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
Operasi Pada Stack/Tumpukan (min) sekaligus 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
Variasi dalam C (min) sekaligus

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
Operasi PUSH (min) sekaligus

  • 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.

F


Push (min) sekaligus

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
Operasi POP (min) sekaligus

  • POP digunakan untuk menghapus elemen dari stack yang terletak pada bagian paling atas

F


POP (min) sekaligus

void POP(STACK S)

/*

top(S)top(S)-1

*/

Bagaimana jika stack kosong (S.Top =0)?????????

Apa yang akan di hilangkan ?????


Pop solusi 1
POP Solusi 1 (min) sekaligus

void POP(STACK S)

/*

jika top(S)=-1) maka

output("Stack Kosong");

selain itu

top(S)top(S)-1;

*/


Pop solusi 2 better
POP solusi 2 (better) (min) sekaligus

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
Implementasi (min) sekaligus

  • BALIK KALIMAT

Source c


Struktur data dinamis pointer
Struktur data dinamis (pointer) (min) sekaligus

  • 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 pointer1
Struktur data dinamis (pointer) (min) sekaligus

  • 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.


Ilustrasi6
Ilustrasi (min) sekaligus

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
Memahami pointer (min) sekaligus

  • 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 integerdia juga mengeset table symbol


Memahami pointer1
Memahami pointer (min) sekaligus

  • Jika k=5

  • Ada aturan lvalue=rvalue, 5 di asosiasikan dengan k

  • Bagaimana dengan 5=k ???

  • rvalue SELALU di sebelah kanan penugasan


Memahami pointer2
Memahami Pointer (min) sekaligus

& operator dereference

Mengambil alamat suatu variabel

* Operator reference

Mengambil nilai dari

alamat suatu variabel

sumber


Deklarasi struktur data pointer
Deklarasi struktur data pointer (min) sekaligus

typedef struct node*stack;

struct node {

int data;

stack next;

};

stacktop;

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
Implementasi Stack Dinamis (min) sekaligus

typedef struct node*stack;

struct node {

int data;

stack next;

};

stacktop,bottom;

Int A,B,C;


Implementasi stack dinamis1
Implementasi Stack Dinamis (min) sekaligus

typedef struct node*stack;

struct node {

int data;

stack next;

};

stacktop,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)


Ilustrasi7
Ilustrasi (min) sekaligus

Bag statis

typedefstruct node *stack;

struct node {

int data;

stack next;

};

stacktop,bottom;

int A,B,C;


Stack dinamis
Stack Dinamis (min) sekaligus

typedefstruct 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.


Ilustrasi8

top (min) sekaligus

Var pointer

Node/Simpul

Field next

NULL

Ilustrasi

typedefstruct node *stack;

struct node {

int data;

stack next;

};

stack top,bottom;

int A,B,C;


Ilustrasi9

top (min) sekaligus

Var pointer

bottom

Var pointer

Node/Simpul

Tidak bernilai

Field next

berisi NULL

Node/Simpul

Tidak bernilai

Field next

berisi NULL

Ilustrasi

top=(struct node*)malloc(sizeof(struct node));

bottom=(struct node*)malloc(sizeof(struct node));


Operasi pointer
Operasi Pointer (min) sekaligus

  • 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

top (min) sekaligus

bottom

Assign Pointer

  • (1) (*top)->data=20;

  • (2) bottom=top;

  • Statemen pertama (1) adalah seperti gambar diatas, sedangkan statement kedua (2) adalah sebagai berikut :


Kopi pointer

top (min) sekaligus

bottom

top

bottom

Kopi Pointer

  • Ini disebut mengkopi pointer, sekarang perhatikan statement berikut:

  • *top=*bottom;

  • Hasilnya adalah seperti dibawah ini, yang disebut mengkopi isi nilai data pointer.


Hapus pointer
Hapus Pointer (min) sekaligus

  • Untuk menghapus pointer gunakan perintah:

  • free(top);free(bottom);


Tipe data dinamis
Tipe Data Dinamis (min) sekaligus

typedef struct telm*addr;

struct telm {

int data;

addr next;

}elm;

typedef addrstack;

Contoh Alokasi addr t :

t=(addr)malloc(sizeof(elm));

Contoh DeAlokasi addr t :

Free(t) ;


Inisialisasi stack
Inisialisasi Stack (min) sekaligus

void initstack(stack t)

/*

tNULL;

*/


Push stack dinamis
Push Stack Dinamis (min) sekaligus

void push(int x, stack t )

/*

addr temp;

Alokasi(temp);

data(temp)x;

next(temp)t;

ttemp;

*/


Pop satu
Pop Satu (min) sekaligus

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);

selain itu

output(”x tidak ada”);

*/


Pop semua
Pop Semua ?????? (min) sekaligus

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
Display Stack Dinamis (min) sekaligus

void disp(stack *t){

struct node *b;

b=(*t);

while(b!=NULL){

printf("%d ",b->data);

b=b->next;

}

}


Display stack dinamis1
Display Stack Dinamis (min) sekaligus

void disp1()

/*

selama(topNULL)

output(data(top));

top next(top);

*/


Implementasi1
Implementasi (min) sekaligus

  • Contoh

  • Latihan Serius (hasil dikumpulkan)


ad