resume praktikum 6 stack
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 :