resume praktikum 6 stack

17
STACK Tugas Disusun Sebagai Tugas Pada Mata Kuliah Praktikum Struktur Data Oleh: Deprilana Ego Prakasa 14102055 PROGRAM STUDI S1 TEKNIK INFORMATIKA

Upload: deprilana-ego-prakasa

Post on 16-Apr-2017

463 views

Category:

Education


11 download

TRANSCRIPT

Page 1: Resume praktikum 6 stack

STACK

TugasDisusun Sebagai Tugas

Pada Mata Kuliah Praktikum Struktur Data

Oleh:Deprilana Ego Prakasa

14102055

PROGRAM STUDI S1 TEKNIK INFORMATIKASEKOLAH TINGGI TEKNOLOGI TELEMATIKA TELKOM

PURWOKERTO2015

Page 2: Resume praktikum 6 stack

STACK

Pengertian Stack

- Stack adalah suatu bentuk khusus dari linear list di mana operasi

penyisipan dan penghapusan atas elemen-elemennya hanya dapat

dilakukan pada satu sisi saja yang disebut sebagai “TOP”.

- Elemen teratas dari stack dinotasikan sebagai TOP(S).

- Untuk stack S, dengan S = [S1, S2, S3, ..., ST] , maka TOP(S) = ST.

- Operasi stack : LIFO (Last In First Out), yaitu : yang terakhir masuk

yang

pertama keluar.

OPERASI DASAR PADA STACK

Ada empat operasi dasar yang didefinisikan pada stack, yaitu :

1. CREATE(stack)

2. ISEMPTY(stack)

3. PUSH(elemen,stack)

4. POP(stack)

CREATE

adalah operator yang menunjukkan suatu stack kosong dengan nama S.

Page 3: Resume praktikum 6 stack

Jadi : NOEL(CREATE(S)) = 0

TOP(CREATE(S)) adalah TIDAK TERDEFINISI.

ISEMPTY

adalah operator yang menentukan apakah stack S kosong.

Operandnya terdiri dari type data stack. Hasilnya merupakan type data

Boolean.

ISEMPTY(S) = True. Jika S hampa, yakni bila NOEL(S) = 0.

PUSH

adalah operator yang menambahkan elemen E pada puncak stack S.

Hasilnya merupakan stack yang lebih besar.

PUSH(E,S). E ditempatkan sebagai TOP(S).

POP(stack)

adalah operator yang menghapus sebuah elemen dari puncak stack S.

Hasilnya merupakan stack yang lebih kecil.

POP(S) mengurangi NOEL(S)

POP(CREATE(S)) kondisi error

POP(PUSH(E,S)) = S

Page 4: Resume praktikum 6 stack

Praktik : 1. Buatlah program untuk melakukan pembalikan terhadap kalimat

dengan menggunakan stack.

Contoh:Kalimat : Struktur DataHasil setelah dibalik : ataD rutkurtS

2. Dari soal no 1, buatlah program untuk menentukan apakah sebuah kalimat yang diinputkan dalam program (dengan menggunakan stack) adalah sebuah palindrom atau bukan. Palindrom adalah kalimat yang jika dibaca dari depan dan dari belakang, maka bunyinya sama.

Contoh:Kalimat : sugusKalimat tersebut adalah palindrom

Kalimat : teniaKalimat tersebut bukan palindrom

Algoritma :

1. Mulai2. Masukkan kata3. Hitung jumlah hurufnya4. Masukkan ke dalam stack (push)5. Bandingkan elemen 1 dalam stack dengan elemen terakhir (pop)6. Perbandingan dilakukan berulang sebanyak jumlah huruf7. Jika huruf yang dibandingkan semuanya sama, maka kata tersebut

adalah palindrome8. Selesai

3. Buatlah program dengan stack untuk mengubah notasi matematika infix menjadi postfix !

1. Source Code:#include<stdio.h>#include<conio.h>#include<string.h>

char balik(char x[50]);char cek(char y[50],char z[50]);

Page 5: Resume praktikum 6 stack

int main(){char m[50],o[50];printf("kalimat : ");gets(m);strcpy(o,m);balik(o);getch();}

char balik(char x[50]){strrev(x);printf("Hasil setelah dibalik : %s",x);}

Output :

2. Source Code :

#include<stdio.h>

#include<conio.h>

#include<string.h>

Page 6: Resume praktikum 6 stack

char balik(char x[50]);

char cek(char y[50],char z[50]);

int main()

{

char m[50],o[50];

printf("kalimat : ");

gets(m);

strcpy(o,m);

balik(o);

cek(m,o);

getch();

printf("kalimat : ");

gets(m);

strcpy(o,m);

balik(o);

cek(m,o);

getch();

}

char balik(char x[50])

{

strrev(x);

}

Page 7: Resume praktikum 6 stack

char cek(char y[50],char z[50])

{

if(strcmp(y,z)==0)

{

printf("\nKalimat tersebut adalah palindrom\n\n");

}

else

{

printf("\nKalimat tersebut bukan palindrom\n\n");

}

}

Output:

Page 8: Resume praktikum 6 stack

3. Source Code :

#include <iostream>#include <string.h>#include <ctype.h>

using namespace std;const int MAX = 50 ;

class infix

{

private :

char target[MAX], stack[MAX] ;

char *s, *t ;

int top ;

public :

infix( ) ;

void setexpr ( char *str ) ;

void push ( char c ) ;

char pop( ) ;

void convert( ) ;

int priority ( char c ) ;

void show( ) ;

} ;

infix :: infix( )

{

top = -1 ;

strcpy ( target, "" ) ;

Page 9: Resume praktikum 6 stack

strcpy ( stack, "" ) ;

t = target ;

s = "" ;

}

void infix :: setexpr ( char *str )

{

s = str ;

}

void infix :: push ( char c )

{

if ( top == MAX )

cout << "\nStack is full\n" ;

else

{

top++ ;

stack[top] = c ;

}

}

char infix :: pop( )

{

if ( top == -1 )

{

cout << "\nStack is empty\n" ;

Page 10: Resume praktikum 6 stack

return -1 ;

}

else

{

char item = stack[top] ;

top-- ;

return item ;

}

}

void infix :: convert( )

{

while ( *s )

{

if ( *s == ' ' || *s == '\t' )

{

s++ ;

continue ;

}

if ( isdigit ( *s ) || isalpha ( *s ) )

{

while ( isdigit ( *s ) || isalpha ( *s ) )

{

*t = *s ;

Page 11: Resume praktikum 6 stack

s++ ;

t++ ;

}

}

if ( *s == '(' )

{

push ( *s ) ;

s++ ;

}

char opr ;

if ( *s == '*' || *s == '+' || *s == '/' || *s == '%' || *s == '-' || *s == '$' )

{

if ( top != -1 )

{

opr = pop( ) ;

while ( priority ( opr ) >= priority ( *s ) )

{

*t = opr ;

t++ ;

opr = pop( ) ;

}

push ( opr ) ;

push ( *s ) ;

Page 12: Resume praktikum 6 stack

}

else

push ( *s ) ;

s++ ;

}

if ( *s == ')' )

{

opr = pop( ) ;

while ( ( opr ) != '(' )

{

*t = opr ;

t++ ;

opr = pop( ) ;

}

s++ ;

}

}

while ( top != -1 )

{

char opr = pop( ) ;

*t = opr ;

t++ ;

}

Page 13: Resume praktikum 6 stack

*t = '\0' ;

}

int infix :: priority ( char c )

{

if ( c == '$' )

return 3 ;

if ( c == '*' || c == '/' || c == '%' )

return 2 ;

else

{

if ( c == '+' || c == '-' )

return 1 ;

else

return 0 ;

}

}

void infix :: show( )

{

cout << target ;

}

int main( )

{

char expr[MAX] ;

Page 14: Resume praktikum 6 stack

infix q ;

cout << "\nMasukan Notasi Infix: " ;

cin.getline ( expr, MAX ) ;q.setexpr ( expr ) ;

q.convert( ) ;cout << "\nHasil Konversi Ke Dalam postfix adalah: " ;q.show( ) ;

}

Output :