Blog information

  • Category: Kuliah

  • Posted By: AglaBridgeMedia

  • Post date: 13 Nov 2020

  • Keywords: stack, program stack, stack dengan bahasa c, stack struktur data, struktur data stack

  • Views: 5167

Contoh Program Stack Menggunakan Bahasa C - Studi Kasus Data Mahasiswa

Assalamualaikum Wr Wb

Kegiatan menumpuk/menyusun buku merupakan kegiatan yang sering kita dilakukan. Buku yang tersusun rapi akan memudahkan kita untuk memindahkan atau menambah buku yang lain. Beralih ke kegiatan yang lebih modern, ketika kita mengakses halaman website tertentu menggunakan web browser, biasanya ada tombol Back untuk kembali pada history halaman sebelumnya. Ketika kita mengetik di halaman word processor seperti Ms. Word atau Notepad, ada fitur yang namanya Undo. Fitur Undo ini berguna jika kita ingin mengembalikan hasil ketikan kita ke keadaan sebelumnya.

Dari beberapa contoh dan ilustrasi di atas, sering kali kita lakukan, namun kita belum tahu bagaimana proses yang ada sebenarnya. Di dalam Ilmu Komputer, proses tersebut dikenal dengan sebutan Stack atau tumpukan. Dengan adanya Stack ini, kita semakin dimudahkan dalam mengorganisasi atau memanajemen data kita. Stack merupakan struktur data yang dipakai untuk menyimpan sekumpulan data. Stack bersifat LIFO (Last In First Out), yang artinya data yang terakhir masuk, akan menjadi yang paling awal untuk dipindah atau dihapus atau diambil. Ilustrasi dari Stack dapat dilihat pada gambar berikut.


|    |

|    |

|    |

|    |

| 4 |

Jika ditambahkan data baru, misal 2, maka akan menjadi seperti gambar berikut.

|    |

|    |

|    |

| 2 |

| 4 |

Jika dihapus, maka data 2 akan hilang, dan Stack akan menjadi seperti pada gambar pertama. Jadi, semua aktifitas penambahan dan penghapusan data selalu dimulai dari atas.

Pada Stack dikenal beberapa perintah untuk memanipulasi datanya, seperti Push, Pop, IsEmpty, Peek, Print/Display. Push untuk menambah data, Pop untuk menghapus data, IsEmpty untuk mengecek apakah Stack kosong atau terisi, Peek untuk mengecek nilai Top dari StackPrint/Display untuk melihat isi dari Stack. Untuk lebih jelasnya, berikut saya berikan contoh programnya menggunakan bahasa C.

#include
#include
#include 
#define MAX_STACK_SIZE 5 //definisikan maksimum stack yang bisa ditampung

typedef int boolean;
#define TRUE 1 //definisikan true bernilai 1
#define FALSE 0 //definisikan false bernilai 0

struct arrayStack { //struct arrayStack
	int nim[MAX_STACK_SIZE];
	char nama[30][MAX_STACK_SIZE];
	int top;
};
typedef struct arrayStack arrayStack; // mendefinisikan tipe arrayStack dari struct arrayStack

//Fungsi yang ada di stack
void push(arrayStack *stack, int nim, char nama[30]); // menambahkan nim dan nama ke dalam stack
int pop(arrayStack *stack);// menghapus Top dari stack
int peek(arrayStack *stack);// mengecek top of stack.
boolean isEmpty(arrayStack *stack); // isEmpty akan mencari tahu apakah stack kosong atau tidak
void display(arrayStack *stack); // menampilkan data stack


int main() {
	int nim, pilihan;
	char nama[30];
	arrayStack stack; // variabel stack dengan tipe arrayStack yg sudah didefinisikan di atas sebelumnya
	arrayStack *stackptr = &stack; //pointer stack
	stack.top = -1; // nilai awal top -1, yg berarti stack dalam keadaan kosong
	awal:
    system("clear");
	while(1) {
		printf("Pilih menu yang kamu inginkan\n");
		printf("1. Push \n2. Pop \n3. Peek \n4. Display \n5. Exit\n");
		printf("Pilihan kamu:\n");
		scanf("%d", &pilihan);
		switch(pilihan) {
			case 1:
				printf("Masukkan nim: "); scanf("%d", &nim);
				printf("Masukkan nama: "); scanf("%s", nama);
				//goto awal;
				push(stackptr, nim, nama);
				break;
			case 2:
                //goto awal;
				printf("Data yang dihapus adalah nim: %d\n", pop(stackptr));
				break;
			case 3:
                //goto awal;
				printf("ToS adalah nim: %d\n", peek(stackptr));
				break;
			case 4:
                //goto awal;
				display(stackptr);
				break;
			case 5:
				exit(0);
				break;
			default:
				goto awal;
				printf("Input Salah!\n");
		}
	}
	return EXIT_SUCCESS;
}

void push(arrayStack *stack, int n, char m[]) {
	if(stack->top == MAX_STACK_SIZE - 1) {
		printf("Warning: Stack sudah penuh, tidak bisa diisi lagi'\n");
		return;
	} else {
        int x;
        x = ++stack->top;
		stack->nim[x] = n; //tambahkan nim ke stack
		strcpy(stack->nama[x], m); //copy nilai variabel parameter m ke stack->nama
	}
}

int pop(arrayStack *stack) {
	if (isEmpty(stack)) { // cek apakah stack kosong atau tidak
		printf("Stack kosong\n"); //jika return true, maka berikan info kalau stack kosong
		return NULL;
	} else {
		int temp, temp2;
		int x;
        x = stack->top--;
		temp = stack->nim[x]; //jika tidak kosong, hapus data nim
		temp2 = stack->nama[x]; //jika tidak kosong, hapus data nama
		return temp; //berikan info data nim yang dihapus
	}
}

int peek(arrayStack *stack) {
	if (isEmpty(stack)) { //cek apakah stack kosong atau tidak
		printf("Stack kosong\n"); //jika return true, maka berikan info kalau stack kosong
		return NULL;
	} else {
		return stack->nim[stack->top]; //jika return false, berarti tidak kosong, tampilkan top dari nimnya
	}
}

int isEmpty(arrayStack *stack) {
	if (stack->top == -1){ //jika stack kosong return true, jika tidak return false
        return TRUE;
	}
	else{
		return FALSE;
    }
}

void display(arrayStack *stack) {
    if (stack->top == -1){
        printf("Stack masih kosong\n");
    } else{
        int i = stack->top; //inisialisasi variabel i dengan top dari stack
        for (; i >= 0; --i){ //loop dengan mengurangkan 1, sampai pada dasar stack
            printf("nim: %d, nama: %s\t", stack->nim[i], stack->nama[i]);
            printf("\n");
        }
    }
}

Ketika kode program di atas dijalankan, akan menghasilkan output seperti berikut.



Saya akan mencoba memasukkan tiga buah data mahasiswa, yaitu nim dan nama menggunakan menu nomor 1, yaitu Push.

Kemudian saya tampilkan datanya dengan memilih menu 4, maka akan tampil seperti gambar berikut.

Nah dari gambar tersebut dapat dilihat bahwa data yang pertama dimasukkan akan menjadi data dengan posisi paling bawah, dan data terakhir akan berada pada posisi teratas atau Top. Jika diberikan aksi Pop maka data teratas akan hilang, dan data teratas atau Top yang baru adalah baris data di bawahnya, seperti pada gambar berikut.

Nah mudah bukan? silakan teman-teman pelajari lagi atau utak atik kode program di atas agar lebih memahami dan lancar dalam meng coding. Tetap sehat, tetap semangat, tetap jaga jarak di masa pandemi covid-19 ini. Semoga wabah ini segera berakhir. Aamiin..

Wassalamualaikum Wr Wb






blog comments powered by Disqus