Stack (tumpukan) Stack(tumpukan) merupakan sebuah logika / cara untuk menyusun data dengan menggunakan prinsip LIFO(last in first out) sehingga data terlihat seperti arsip yang ditumpuk dalam sebuah kotak penyimpanan. Contoh listing program dengan menggunakan prinsip Stack. #include <stdio.h> #include #define MAX 10 //Pendeklarasian typedef struct { int top; int data[MAX]; }Stack; Stack tumpukan; //Inisialisasi void Inisialisasi() { tumpukan.top =0; } //memeriksa kondisi apakh kosong atau penuh int IsEmpty(){ if(tumpukan.top==0) return 1; else return 0; } int IsFull(){ if(tumpukan.top==MAX) return 1; else return 0; } //Tambah data tumpukkan void Push(int data){ if(IsEmpty()==1){ tumpukan.top++; tumpukan.data[tumpukan.top]=data; } else if(IsFull()==0){ tumpukan.top++; tumpukan.data[tumpukan.top]=data; } printf("\n\nDATA MASUK !!\n",tumpukan.data[tumpukan.top]); printf("\n\n\[press anykey to continue]"); } //Hapus Data atau ambil tumpukan teratas void Pop(){ printf("\n\nData Tumpukan teratas = %d\n",tumpukan.data[tumpukan.top]); printf("\nSUDAH DI HAPUS !!");
tumpukan.top--; printf("\n\n[press anykey to continue]"); } //Tampilkan data void Tampil(){ if(IsEmpty()==0){ for(int i=tumpukan.top;i>0;i--){ printf("\n %d\n----",tumpukan.data[i]); } }else printf("\nKOSONG!!\n"); printf("\n\n[press anykey to continue]"); } //Kosongkan Stack void Clear(){ tumpukan.top =0; printf("\nStack Sudah diKosongkan !!\n"); printf("\n\n[press anykey to continue]"); } //Menu Pilihan void main() { int pil; int data; Inisialisasi(); do{ clrscr(); printf("\t\tSTACK (TUMPUKAN)\n"); printf("\t\t****************\n\n"); printf("===================\n"); printf(" [MENU]\n"); printf("===================\n"); printf("1. Push (Tambah Tumpukan)\n"); printf("2. Pop (Hapus Data Teratas)\n"); printf("3. Tampilkan isi Stack\n"); printf("4. Kosongkan semua isi Stack\n"); printf("5. Exit\n"); printf("===================\n"); printf("Pilihan = ");scanf("%d",&pil); printf("\n"); switch(pil){ case 1: printf("\nMasukkan Angka = "); scanf("%d",&data); Push(data); break; case 2: Pop(); break; case 3: printf("\nISI STACK = \n");Tampil(); break; case 4: Clear();
break; case 5: printf("\n--- THANK YOU ---- \n\n\npress anykey to exit"); }getch(); } while(pil!=5); }
Selipkan data di index yang kosong (Tugas Praktikan Convert ke bahasa C++): #include <stdio.h> #include #define MAX 10 //Pendeklarasian typedef struct { int top; int data[MAX]; }Stack; Stack tumpukan; void Inisialisasi(); int IsEmpty(); int IsFull(); int dimana(); void Push(int data); void Selipkan(int selip); void Pop(); void Tampil(); void Clear(); int cek(); //Inisialisasi void Inisialisasi() { tumpukan.top =0; } //memeriksa kondisi apakh kosong atau penuh int IsEmpty(){ if(tumpukan.top==0) return 1; else return 0; } int IsFull(){ if(tumpukan.top==MAX) return 1; else return 0; } //cek dulu int cek() { if(IsEmpty()==1) { return 1;
} else return 0; } //cek tempat kosong int dimana(){ int k; for(k=1;k<=tumpukan.top;k++) { if(tumpukan.data[k]==0) { printf("\tIndex [%i] kosong\n",k); } } printf("\n\n[press anykey to continue]"); } //Tambah data tumpukkan void Push(int data){ if(IsEmpty()==1){ tumpukan.top++; tumpukan.data[tumpukan.top]=data; } else if(IsFull()==0){ tumpukan.top++; tumpukan.data[tumpukan.top]=data; } printf("\n\nDATA MASUK !!\n",tumpukan.data[tumpukan.top]); printf("\n\n\[press anykey to continue]"); } //selipkan data pada tempat kosong void Selipkan(int a,int selip){ tumpukan.data[a]=selip; printf("\n\n[press anykey to continue]"); } //Hapus Data yang dipilih void Pop(){ int x,n; Tampil(); printf("data yang ingin dihapus : "); scanf("%d",&x); for(n=1;n<=tumpukan.top;n++) { if(tumpukan.data[n]==x) { tumpukan.data[n]=0; } } printf("\n\n[press anykey to continue]"); } //Tampilkan data void Tampil(){ if(IsEmpty()==0){ for(int i=tumpukan.top;i>0;i--){
printf("\n %d\n----",tumpukan.data[i]); } }else printf("\nKOSONG!!\n"); } //Kosongkan Stack void Clear(){ tumpukan.top =0; printf("\nStack Sudah diKosongkan !!\n"); printf("\n\n[press anykey to continue]"); } //Menu Pilihan void main() { int pil; int data,in,mas; Inisialisasi(); do{ clrscr(); printf("\t\tSTACK (TUMPUKAN)\n"); printf("\t\t****************\n\n"); printf("===================\n"); printf(" [MENU]\n"); printf("===================\n"); printf("1. Push (Tambah Tumpukan)\n"); printf("2. Pop (Hapus Data)\n"); printf("3. Tampilkan isi Stack\n"); printf("4. Kosongkan semua isi Stack\n"); printf("5. Mana Stack yang kosong\n"); printf("6. Selipkan data pada tempat yang kosong\n"); printf("7. Exit\n"); printf("===================\n"); printf("Pilihan = ");scanf("%d",&pil); printf("\n"); switch(pil){ case 1: printf("\nMasukkan Angka = "); scanf("%d",&data); Push(data); break; case 2: Pop(); break; case 3: printf("\nISI STACK = \n"); Tampil(); printf("\n\n[press anykey to continue]"); break; case 4: Clear(); break; case 5: if(cek()==1){printf("STACK MASIH KOSONG!!!"); printf("\n\n[press anykey to continue]"); break;} else dimana(); break; case 6: if(cek()==1){printf("STACK MASIH KOSONG!!!"); printf("\n\n[press anykey to continue]"); break;}
else { printf("masukkan data pada index ke : "); scanf("%d",&in); printf("data yang dimasukkan : ");scanf("%d",&mas); Selipkan(in,mas); } break; case 7: printf("\n--- THANK YOU ---- \n\n\npress anykey to exit"); }getch(); } while(pil!=7); }