Download - Resume praktikum 6 stack
![Page 1: Resume praktikum 6 stack](https://reader033.vdocuments.pub/reader033/viewer/2022061320/58f28e2d1a28abf1468b45c1/html5/thumbnails/1.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022061320/58f28e2d1a28abf1468b45c1/html5/thumbnails/2.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022061320/58f28e2d1a28abf1468b45c1/html5/thumbnails/3.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022061320/58f28e2d1a28abf1468b45c1/html5/thumbnails/4.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022061320/58f28e2d1a28abf1468b45c1/html5/thumbnails/5.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022061320/58f28e2d1a28abf1468b45c1/html5/thumbnails/6.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022061320/58f28e2d1a28abf1468b45c1/html5/thumbnails/7.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022061320/58f28e2d1a28abf1468b45c1/html5/thumbnails/8.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022061320/58f28e2d1a28abf1468b45c1/html5/thumbnails/9.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022061320/58f28e2d1a28abf1468b45c1/html5/thumbnails/10.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022061320/58f28e2d1a28abf1468b45c1/html5/thumbnails/11.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022061320/58f28e2d1a28abf1468b45c1/html5/thumbnails/12.jpg)
}
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](https://reader033.vdocuments.pub/reader033/viewer/2022061320/58f28e2d1a28abf1468b45c1/html5/thumbnails/13.jpg)
*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](https://reader033.vdocuments.pub/reader033/viewer/2022061320/58f28e2d1a28abf1468b45c1/html5/thumbnails/14.jpg)
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 :