resume praktikum 6 stack

Post on 16-Apr-2017

463 Views

Category:

Education

11 Downloads

Preview:

Click to see full reader

TRANSCRIPT

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

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.

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

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

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>

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

}

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:

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

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

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 ;

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

}

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

}

*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] ;

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 :

top related