Struktur
data adalah cara menyimpan atau merepresentasikan data didalam komputer
agar bisa dipakai secara efisien. Sedangkan data adalah representasi
dari fakta dunia nyata. Fakta atau keterangan tentang kenyataan yang
disimpan, direkam atau direpresentasikan dalam bentuk tulisan, suara, gambar, sinyal atau simbol.
Secara garis besar type data dapat dikategorikan menjadi:
Type data sederhana.
Type data sederhana.
- Type data sederhana tunggal, misalnya Integer, real, boolean dan karakter.
- Type data sederhana majemuk, misalnyaString
Struktur Data, meliputi:
- Struktur data sederhana, misalnya array dan record.
- Struktur data majemuk, yang terdiri dari:
Linier : Stack, Queue, sertaList dan Multilist
Non Linier : Pohon Biner dan Graph
Non Linier : Pohon Biner dan Graph
Pemakaian struktur data yang tepat didalam proses pemrograman akan menghasilkan algoritma yang lebih jelas dan tepat, sehingga menjadikan program secara keseluruhan lebih efisien dan sederhana.
Struktur data yang standar yang biasanya digunakan dibidang informatika adalah:
* List linier (Linked List) dan variasinya
* Multilist
* Stack (Tumpukan)
* Queue (Antrian)
* Tree ( Pohon)
* Graph ( Graf )
Struktur data yang standar yang biasanya digunakan dibidang informatika adalah:
* List linier (Linked List) dan variasinya
* Multilist
* Stack (Tumpukan)
* Queue (Antrian)
* Tree ( Pohon)
* Graph ( Graf )
REVIEW RECORD (REKAMAN)
Disusun oleh satu atau lebih field. Tiap field menyimpan data dari tipe dasar tertentu atau dari tipe bentukan lain yang sudah didefinisikan sebelumnya. Nama rekaman ditentukan oleh pemrogram.
Disusun oleh satu atau lebih field. Tiap field menyimpan data dari tipe dasar tertentu atau dari tipe bentukan lain yang sudah didefinisikan sebelumnya. Nama rekaman ditentukan oleh pemrogram.
Rekaman disebut juga tipe terstruktur
DOUBLE LINKED LIST CIRCULAR (DLLC)
Definisi
Double Linked List Circular adalah linked list dengan menggunakan pointer, dimana setiap node memiliki 3 field, yaitu 1 field pointer yang menunjuk pointer berikutnya (next), 1 field menunjuk pointer sebelumnya (prev), serta sebuah field yang berisi data untuk node tersebut. Double Linked List Circular pointer next dan prev-nya menunjuk ke dirinya sendiri secara circular.
Double Linked List Circular adalah linked list dengan menggunakan pointer, dimana setiap node memiliki 3 field, yaitu 1 field pointer yang menunjuk pointer berikutnya (next), 1 field menunjuk pointer sebelumnya (prev), serta sebuah field yang berisi data untuk node tersebut. Double Linked List Circular pointer next dan prev-nya menunjuk ke dirinya sendiri secara circular.
Bentuk Node DLLC
Pengertian:
Double : field pointer-nya terdiri dari dua buah dan dua arah, yaitu prev dan next.
Linked List : node-node tersebut saling terhubung satu sama lain.
Circular : pointer next dan prev-nya menunjuk ke dirinya sendiri.
Ilustrasi Double Linked List Circular
Pengertian:
Double : field pointer-nya terdiri dari dua buah dan dua arah, yaitu prev dan next.
Linked List : node-node tersebut saling terhubung satu sama lain.
Circular : pointer next dan prev-nya menunjuk ke dirinya sendiri.
Ilustrasi Double Linked List Circular
Setiap node pada linked list mempunyai field yang berisi data dan pointer ke node berikutnya dan ke node sebelumnya.
Untuk pembentukan node baru, mulanya pointer next dan prev akan menunjuk ke dirinya sendiri.
Jika sudah lebih dari satu node, maka pointer prev akan menunjuk ke
node sebelumnya, dan pointer next akan menunjuk ke node sesudahnya.
Pembuatan Double Linked List Circular
Deklarasi node, dibuat dari struct berikut ini:
Penjelasan:
Deklarasi node, dibuat dari struct berikut ini:
Penjelasan:
Pembuatan struct bernama TNode yang berisi 3 field, yaitu field data
bertipe integer dan field next dan prev yang bertipe pointer dari Tnode.
Setelah pembuatan struct, buat variabel haed yang bertipe pointer dari TNode yang berguna sebagai kepala linked list.
Pembuatan Node Baru:
Digunakan keyword new yang berarti mempersiapkan sebuah node baru berserta alokasi memorinya, pointer prev dan next menunju ke dirinya sendiri.
Pembuatan Node Baru:
Digunakan keyword new yang berarti mempersiapkan sebuah node baru berserta alokasi memorinya, pointer prev dan next menunju ke dirinya sendiri.
Double Linked List Circular Menggunakan Head
Menggunakan 1 pointer head.
Head selalu menunjuk node pertama.
Deklarasi Pointer Head:
Manipulasi linked list tidak bisa dilakukan langsung ke node yang dituju, melainkan harus melalui node pertama dalam linked list. Deklarasinya sebagai berikut:
Penambahan Data
Penambahan Data di Depan:
Penambahan node baru akan dikaitan di node paling depan, namun pada saat pertama kali (data masih kosong), maka penambahan data dilakukan pada head-nya.
Pada prinsipnya adalah mengkaitkan data baru dengan head, kemudian head akan menunjuk pada data baru tersebut sehingga head akan tetap selalu menjadi data terdepan. Dibutuhkan pointer bantu yang digunakan untuk menunjuk node terakhir (headprev) yang akan digunakan untuk mengikat list dengan node terdepan.
Deklarasi Pointer Head:
Manipulasi linked list tidak bisa dilakukan langsung ke node yang dituju, melainkan harus melalui node pertama dalam linked list. Deklarasinya sebagai berikut:
Penambahan Data
Penambahan Data di Depan:
Penambahan node baru akan dikaitan di node paling depan, namun pada saat pertama kali (data masih kosong), maka penambahan data dilakukan pada head-nya.
Pada prinsipnya adalah mengkaitkan data baru dengan head, kemudian head akan menunjuk pada data baru tersebut sehingga head akan tetap selalu menjadi data terdepan. Dibutuhkan pointer bantu yang digunakan untuk menunjuk node terakhir (headprev) yang akan digunakan untuk mengikat list dengan node terdepan.
#include <iostream.h>
#include <conio.h>
#include <stdio.h>
#include <alloc.h>
int pil;
void pilih();
void buat_baru();
void tambah_belakang();
void tambah_depan();
void hapus_belakang();
void hapus_depan();
void tampil();
#include <conio.h>
#include <stdio.h>
#include <alloc.h>
int pil;
void pilih();
void buat_baru();
void tambah_belakang();
void tambah_depan();
void hapus_belakang();
void hapus_depan();
void tampil();
struct simpul
{
char nim[8], nama [20];
int umur;
struct simpul *kiri, *kanan;
} mhs, *baru, *awal=NULL, *akhir=NULL,*hapus,*bantu;
int main()
{
do
{
clrscr();
cout<<"MENU DOUBLE LINKEDLIST"<<endl;
cout<<"1. Tambah Depan"<<endl;
cout<<"2. Tambah Belakang"<<endl;
cout<<"3. Hapus Depan"<<endl;
cout<<"4. Hapus Belakang"<<endl;
cout<<"5. Tampilkan"<<endl;
cout<<"6. Selesai"<<endl;
cout<<"Pilihan Anda : ";
cin>>pil;
pilih();
} while(pil!=6);
return 0;
}
void pilih()
{
if(pil==1)
tambah_depan();
else if(pil==2)
tambah_belakang();
else if(pil==3)
hapus_depan();
else if(pil==4)
hapus_belakang();
else if(pil==5)
tampil();
else
cout<<"selesai";
}
void buat_baru()
{
baru=(simpul*)malloc(sizeof(struct simpul));
cout<<"input nim : ";cin>>baru->nim;
cout<<"input nama : ";cin>>baru->nama;
cout<<"input umur : ";cin>>baru->umur;
baru->kiri=NULL;
baru->kanan=NULL;
}
void tambah_belakang()
{
buat_baru();
if(awal==NULL)
{
awal=baru;
akhir=baru;
}
else
{
akhir->kanan=baru;
baru->kiri=akhir;
akhir=baru;
}
cout<<endl<<endl;
tampil();
}
void tambah_depan()
{
buat_baru();
if(awal==NULL)
{
awal=baru;
akhir=baru;
}
else
{
baru->kanan=awal;
awal->kiri=baru;
awal=baru;
}
cout<<endl<<endl;
tampil();
}
void hapus_depan()
{
if (awal==NULL)
cout<<"Kosong";
else if (awal->kanan==NULL)
{
hapus=awal;
awal=NULL;
akhir=NULL;
free(hapus);
}
else
{
hapus=awal;
awal=hapus->kanan;
awal->kiri=NULL;
free(hapus);
}
cout<<endl<<endl;
tampil();
}
void hapus_belakang()
{
if (awal==NULL)
cout<<"Kosong";
else if (awal->kanan==NULL)
{
hapus=awal;
awal=NULL;
akhir=NULL;
free(hapus);
}
else
{
hapus=akhir;
akhir=hapus->kiri;
akhir->kanan=NULL;
free(hapus);
}
cout<<endl<<endl;
tampil();
}
void tampil()
{
if (awal==NULL)
cout<<"Kosong";
else
{
bantu=awal;
while(bantu!=NULL)
{
cout<<"nim : "<<bantu->nim;
cout<<" nama : "<<bantu->nama;
cout<<" umur : "<<bantu->umur<<endl;
bantu=bantu->kanan;
}
}
getch();
}
Double Linked List Non Circular ( DLLNC )
DLLNC "Double linked list non circular" adalah Double Linked List yang memiliki 2 buah pointer yaitu pointer next dan prev.
Pointer next menunjuk pada node setelahnya dan pointer prev menunjuk pada node sebelumnya.
Pengertian:
Double : artinya field pointer-nya dua buah dan dua arah, ke node sebelum dan sesudahnya.
Linked List : artinya node-node tersebut saling terhubung satu sama lain.
Non Circular : artinya pointer prev dan next-nya akan menunjuk pada NULL.
Setiap node pada linked list mempunyai field yang berisi data dan pointer ke node berikutnya & ke node sebelumnya
Untuk pembentukan node baru , mulanya pointer next dan prev akan menunjuk ke nilai NULL
Selanjutnya pointer prev akan menunjuk ke node sebelumnya , dan pointer next akan menunjuk ke node selanjutnya pada list.
Deklarasi dan node baru DLLNC
Deklarasi node
Dibuat dari struct berikut ini :
typedef struct TNode {
int data ;
TNode *next ;
Tnode * prev ;
};
Pembentukan node baru
Digunakan keyword new yang berarti mempersiapkan sebuah node baru berserta alokasi memorinya .
TNode * baru ;
baru = new TNode ;
baru ->data = databaru ;
baru ->next = NULL;
baru -> prev = NULL;
contoh :
#include
"stdio.h"
#include
"stdlib.h"
#include
"conio.h"
struct node{
struct node
*previous;
int info;
struct node
*next;
};
typedef struct
node *simpul;
void main()
{
simpul baru,
awal=NULL, akhir=NULL, temp;
int pilih;
do
{
cout("MENU\n");
cout("1. Isi
depan\n");
cout("2.
tampil\n");
cout("3.
cari\n");
cout("4.
hapus Depan\n");
cout("PILIH:
");
scanf("%d",
&pilih);
switch(pilih)
{
case 1:
int data;
cout("Data
Masuk: ");
scanf("%i",
&data);
baru = (simpul)
malloc(sizeof (struct node));
baru->info =
data;
baru->next =
NULL;
baru->previous
= NULL;
if (awal == NULL)
{
awal = baru;
akhir = baru;
}
else
{
baru->next =
awal;
awal->previous
= baru;
awal = baru;
}
break;
case 2:
clrscr();
cout("Dari
AWAL\n");
temp = awal;
while(temp!=NULL)
{
cout("%i
", temp->info);
temp =
temp->next;
}
cout("\nDari
AKHIR\n");
temp = akhir;
while(temp!=NULL)
{
cout("%i
", temp->info);
temp =
temp->previous;
}
cout("\n");
break;
case 3:
clrscr();
int cari;
cout("Cari
Angka: ");
scanf("%i",
&cari);
temp = awal;
while((temp!=NULL)&&(temp->info!=cari))
{
temp =
temp->next;
}
if(temp != NULL
&& temp->info == cari)
cout("Data
Ditemukan");
else
cout("Data
Tidak Ditemukan");
cout("\n");
break;
case 4:
clrscr();
temp = awal;
awal =
awal->next;
if (awal != NULL)
awal->previous
= NULL;
if (awal == NULL)
akhir = NULL;
free(temp);
break;
}
}while
(pilih!=5);
}
Single Linked List Circular
Single Linked List Circular (SLLC) adalah Single Linked List yang pointer nextnya menunjuk pada dirinya sendiri. Jika Single Linked List tersebut terdiri dari beberapa node, maka pointer next pada node terakhir akan menunjuk ke node terdepannya.
Pengertian:
Node : rangkaian beberapa simpul
Single : artinya field pointer-nya hanya satu buah saja dan satu arah.
Linked List : artinya node-node tersebut saling terhubung satu sama lain.
Circular : artinya pointer next-nya akan menunjuk pada dirinya sendiri sehingga berputar

Ilustrasi SLLC
Setiap node pada linked list mempunyai field yang berisi pointer ke node berikutnya, dan juga memiliki field yang berisi data. Pada akhir linked list, node terakhir akan menunjuk ke node terdepan sehingga linked list tersebut berputar.

Deklarasi:
Deklarasi node dibuat dari struct berikut ini:
typedef struct TNode{
int data;
TNode *next;
};
Pembentukan node baru
Digunakan keyword new yang berarti mempersiapkan sebuah node baru
berserta alokasi memorinya.
TNode *baru;
baru = new TNode;
baru->data = databaru;
baru->next = baru;
Dibutuhkan satu buah variabel pointer: head
Head akan selalu menunjuk pada node pertama

Penambahan data di depan
Penambahan node baru akan dikaitan di node paling depan, namun pada saat pertama kali (data masih kosong), maka penambahan data dilakukan pada head nya.
Pada prinsipnya adalah mengkaitkan data baru dengan head, kemudian head akan menunjuk pada data baru tersebut sehingga head akan tetap selalu menjadi data terdepan. Untuk menghubungkan node terakhir dengan node terdepan dibutuhkan pointer bantu.
HEAD Single Linked List Circular
Penambahan data di depan

Penambahan data di depan
void insertDepan(int databaru){
TNode *baru,*bantu;
baru = new TNode;
baru->data = databaru;
baru->next = baru;
if(isEmpty()==1){
head=baru;
head->next=head;
}
else {
bantu = head;
while(bantu->next!=head){
bantu=bantu->next;
}
baru->next = head;
head = baru;
bantu->next = head;
}
printf(“Data masuk\n“);
}
Penambahan data di belakang
Penambahan data dilakukan di belakang, namun pada saat pertama kali data langsung ditunjuk pada head-nya.
Penambahan di belakang lebih sulit karena kita membutuhkan pointer bantu untuk mengetahui data terbelakang, kemudian dikaitkan dengan data baru. Untuk mengetahui data terbelakang perlu digunakan perulangan.


Penambahan data di belakang
void insertBelakang (int databaru){
TNode *baru,*bantu;
baru = new TNode;
baru->data = databaru;
baru->next = baru;
if(isEmpty()==1){
head=baru;
head->next=head;
}
else {
bantu = head;
while(bantu->next != head){
bantu=bantu->next;
}
bantu->next = baru;
baru->next = head;
}
printf(“Data masuk\n“);
}
Operasi Penghapusan
Penghapusan node dilakukan dengan memutus rantai node kemudian menghapus node. Jika node berada di tengah rangkaian, rangkaian yang terputus perlu disambung kembali. Untuk memudahkan penghapusan simpul dibutuhkan dua cursor sebagai simpul bantu. Selain cursor juga dibutuhkan simpul head sebagai acuan awal simpul dalam rangkaian.
Berikut langkah langkah untuk menghapus simpul dalam rangkaian:
- Buat cursor bantu yang menunjuk ke awal node(simpul).
- Pindahkan cursor ke node berikutnya
- Putus sambungan awal node dengan node berikutnya.
- Hapus rangkaian
- Jika berada di akhir rangkaian, putuskan dari rangkaian sebelumnya
- Jika di tengah rangkaian, pindahkan penunjukan node berikutnya, atau di akhir, atau setelah node yang akan dihapus

Ilustrasi Hapus Depan
void hapusDepan (){
TNode *hapus,*bantu;
if (isEmpty()==0){
int d;
hapus = head;
d = head->data;
if(head->next != head){
bantu = head;
while(bantu->next!=head){
bantu=bantu->next;
}
head = head->next;
delete hapus;
bantu->next = head;
}else{
head=NULL;
}
printf(“%d terhapus\n“,d);
} else printf(“Masih kosong\n“);
}
Ilustrasi Hapus Belakang

Ilustrasi Hapus Belakang
void hapusBelakang(){
TNode *hapus,*bantu;
if (isEmpty()==0){
int d;
hapus = head;
if(head->next == head){
head = NULL;
}else{
bantu = head;
while(bantu->next->next != head){
bantu = bantu->next;
}
hapus = bantu->next;
d = bantu->data;
bantu->next = head;
delete hapus;
}
printf(“%d terhapus\n“,d);
} else printf(“Masih kosong\n“);
}
Contoh Coding Stack Dengan Linked List
#include <iostream.h>#include <conio.h>
/* membuat linked list */
typedef struct myLinkedList {
char nim[10];
char nama[35];
int nilai;
myLinkedList *next;
};
myLinkedList *head;
/* keadaan awal */
void init() {
head = NULL;
}
/* fungsi untuk mengecek linked list
* apakah kosong atau tidak
* jika kosong maka bernilai 1
* jika tidak kosong maka bernilai 0
*/
int paKosong() {
if (head == NULL) return 1;
else return 0;
}
/**
* fungsi untuk menambahkan data dari depan node
*/
void tambahDepan() {
myLinkedList *baru;
baru = new myLinkedList;
cout << “Masukkan Data lengkap di bawah ini : ” << endl;
cout << “NIM : “; cin >> baru->nim;
cout << “Nama : “; cin >> baru->nama;
cout << “Nilai : “; cin >> baru->nilai;
baru->next = NULL;
if (paKosong() == 1) {
head = baru;
head->next = NULL;
} else {
baru->next = head;
head = baru;
}
}
/**
* fungsu untuk menambahkan data dari depan node
*/
void tambahBelakang() {
myLinkedList *baru, *bantu;
baru = new myLinkedList;
cout << “Masukkan Data lengkap di bawah ini : ” << endl;
cout << “NIM : “; cin >> baru->nim;
cout << “Nama : “; cin >> baru->nama;
cout << “Nilai : “; cin >> baru->nilai;
baru->next = NULL;
if (paKosong() == 1) {
head = baru;
head->next = NULL;
} else {
bantu = head;
while (bantu->next != NULL) {
bantu = bantu->next;
}
bantu->next = baru;
}
}
/**
* fungsi untuk menghapus dari depan node
*/
void hapusDepan() {
myLinkedList *hapus;
char *data;
if (paKosong() == 0) {
if (head->next != NULL) {
hapus = head;
data = hapus->nim;
head = head->next;
delete hapus;
} else {
data = head->nim;
head = NULL;
}
cout << data << ” sudah terhapus \n”;
} else {
cout << “Data Masih kosong..\n”;
}
cout << “Tekan Enter untuk kembali ke Menu!”;
getch();
}
/**
* fungsi untuk menghapus dari belakang node
*/
void hapusBelakang() {
myLinkedList *hapus, *bantu;
char *data;
if (paKosong() == 0) {
if (head->next != NULL) {
bantu = head;
while(bantu->next->next != NULL) {
bantu = bantu->next;
}
hapus = bantu->next;
data = hapus->nim;
bantu->next = NULL;
delete hapus;
} else {
data = head->nim;
head = NULL;
}
cout << data << ” sudah terhapus… ” << endl;
} else {
cout << “Data masih kosong…” << endl;
}
cout << “Tekan Enter untuk kembali ke Menu!”;
getch();
}
/**
* fungsi untuk menampilkan data linked list
*/
void tampilData() {
int no = 1;
myLinkedList *bantu;
bantu = head;
if (paKosong() == 0) {
while (bantu != NULL) {
cout << “No. : ” << no << endl;
cout << “NIM : ” << bantu->nim << endl;
cout << “Nama : ” << bantu->nama << endl;
cout << “Nilai : ” << bantu->nilai << endl << endl;
no++;
bantu = bantu->next;
}
cout << endl;
} else {
cout << “Data masih kosong ” << endl;
}
cout << “Tekan Enter untuk kembali ke menu!”;
getch();
}
/**
* fungsi Menu, Untuk menentukan linked list mana
* yang dipilih
*/
int menu() {
int pilihan;
cout << “+———————-+\n”;
cout << “| MENU PILIHAN |\n”;
cout << “+———————-+\n”;
cout << “| 1. Tambah Depan |\n”;
cout << “| 2. Tambah Belakang |\n”;
cout << “| 3. Hapus Depan |\n”;
cout << “| 4. Hapus Belakang |\n”;
cout << “| 5. Tambah Tengah |\n”;
cout << “| 6. Hapus Tengah |\n”;
cout << “| 7. TampilData |\n”;
cout << “| 8. Keluar |\n”;
cout << “+———————-+\n”;
cout << “| PILIHAN ANDA ? [ ] |\n”;
cout << “+———————-+\n”;
cin >> pilihan;
return pilihan;
}
/**
* fungsi operasi data
*/
void operasiData() {
int pilih;
do {
pilih = menu();
switch (pilih) {
case 1 :
tambahDepan();
break;
case 2 :
tambahBelakang();
break;
case 3 :
hapusDepan();
break;
case 4 :
hapusBelakang();
break;
case 5 :
tampilData();
break;
case 6:
cout << “Terima kasih coy!!!”;
break;
}
} while (pilih != 6);
}
/**
* PROGRAM UTAMA
*/
void main() {
init();
operasiData();
}
Program Single Linked List non Circular
#include <iostream.h> //File Header Iostream
#include <conio.h> //File Header Conio
typedef struct TNode { //Deklarasi Linked List
int data; //data bertipe integer
TNode *next; //pointer Next
}; //penutup deklarasi
TNode *head; //disini menggunakan head sebagai pointer utama dari linked list
int data; //data bertipe integer
TNode *next; //pointer Next
}; //penutup deklarasi
TNode *head; //disini menggunakan head sebagai pointer utama dari linked list
void init(){ //Fungsi untuk inisialisasi awal linked list
head=NULL; //Untuk pertama kali, head bernilai NULL
}
head=NULL; //Untuk pertama kali, head bernilai NULL
}
int IsEmpty(){ //Fungsi untuk mengetahui apakah Linked list kosong atau ada isinya
if(head==NULL) // apabila head==NULL, maka return 1
return 1;
else
return 0; // Selain itu maka Return 0
}
if(head==NULL) // apabila head==NULL, maka return 1
return 1;
else
return 0; // Selain itu maka Return 0
}
void insertdepan(int n){ //Fungsi untuk menambahkan data baru (n didapat dari input di program utama (main))
TNode *baru; //Disini menggunakan baru sebagai pointer TNode nya
baru=new TNode;
baru->data=n; //pointer baru->data berisi nilai variabel n
baru->next=NULL; // pointer baru->next berisi NULL
if(IsEmpty()==1){ //periksa apakah linked list bernilai, jika return 1(tidak bernilai), maka akan mengeksekusi perintah hingga ‘}’
head=baru; //Nilai head= Nilai baru
head->next=NULL;
}
else { // Jika return 0(linked list bernilai), maka akan mengeksekusi perintah berikut hingga ‘}’
baru->next=head;
head=baru;
}
cout<<”Data Terisi”;
}
TNode *baru; //Disini menggunakan baru sebagai pointer TNode nya
baru=new TNode;
baru->data=n; //pointer baru->data berisi nilai variabel n
baru->next=NULL; // pointer baru->next berisi NULL
if(IsEmpty()==1){ //periksa apakah linked list bernilai, jika return 1(tidak bernilai), maka akan mengeksekusi perintah hingga ‘}’
head=baru; //Nilai head= Nilai baru
head->next=NULL;
}
else { // Jika return 0(linked list bernilai), maka akan mengeksekusi perintah berikut hingga ‘}’
baru->next=head;
head=baru;
}
cout<<”Data Terisi”;
}
void insertbelakang(int n){ //Fungsi untuk insert Belakang(Menambahkan data di belakang data lama)
TNode *baru,*bantu; //Pointer yang digunakan yaitu baru dan bantu
baru=new TNode;
baru->data=n;
baru->next=NULL;
if(IsEmpty()==1){
head=baru;
head->next=NULL;
}
else {
bantu=head;
while(bantu->next!=NULL){
bantu=bantu->next;
}
bantu->next=baru;
TNode *baru,*bantu; //Pointer yang digunakan yaitu baru dan bantu
baru=new TNode;
baru->data=n;
baru->next=NULL;
if(IsEmpty()==1){
head=baru;
head->next=NULL;
}
else {
bantu=head;
while(bantu->next!=NULL){
bantu=bantu->next;
}
bantu->next=baru;
}
cout<<”Data Terisi”;
}
cout<<”Data Terisi”;
}
void tampil(){ //Fungsi untuk menampilkan linked list yang telah di input / di delete
TNode *bantu; //pointer yang digunakan yaitu bantu
bantu=head; // Nilai bantu= Nilai yang ada di head
if(IsEmpty()==0){ // periksa apakah return 0(bernilai)
while(bantu!=NULL){ //Selama bantu tidak sama dengan NULL, maka di eksekusi
cout<<bantu->data<<endl; // tampilkan di monitor nilai bantu->data
bantu=bantu->next; //Nilai bantu= nilai bantu selanjutnya
}
}
else
cout<<”Masih Kosong”<<endl;
}
TNode *bantu; //pointer yang digunakan yaitu bantu
bantu=head; // Nilai bantu= Nilai yang ada di head
if(IsEmpty()==0){ // periksa apakah return 0(bernilai)
while(bantu!=NULL){ //Selama bantu tidak sama dengan NULL, maka di eksekusi
cout<<bantu->data<<endl; // tampilkan di monitor nilai bantu->data
bantu=bantu->next; //Nilai bantu= nilai bantu selanjutnya
}
}
else
cout<<”Masih Kosong”<<endl;
}
void hapusdepan(){ //Fungsi untuk menghapus Nilai paling depan
TNode *hapus;
int d;
if(IsEmpty()==0){ //periksa apakah return 0(ada nilai)
if(head!=NULL){ // jika head tidak sama dengan Null maka :
hapus=head; // pointer hapus= head
d=hapus->data; //nilai dari d = nilai dari hapus->data
head=hapus->next; // Nilai head sekarang berisi nilai hapus->next
delete hapus; //fungsi untuk menghapus nilai yang ada di pointer hapus
}
cout<<d<<” Terhapus”<<endl;
}
else
cout<<”Masih Kosong”<<endl;
}
TNode *hapus;
int d;
if(IsEmpty()==0){ //periksa apakah return 0(ada nilai)
if(head!=NULL){ // jika head tidak sama dengan Null maka :
hapus=head; // pointer hapus= head
d=hapus->data; //nilai dari d = nilai dari hapus->data
head=hapus->next; // Nilai head sekarang berisi nilai hapus->next
delete hapus; //fungsi untuk menghapus nilai yang ada di pointer hapus
}
cout<<d<<” Terhapus”<<endl;
}
else
cout<<”Masih Kosong”<<endl;
}
main(){ // Fungsi Utama dari program
int pil;
do{
clrscr();
int n;
cout<<”1.Insert Depan”<<endl;
cout<<”2.Insert Belakang”<<endl;
cout<<”3.Display”<<endl;
cout<<”4.Delete”<<endl;
cout<<”5.Exit”<<endl;
cout<<”Masukan Pilihan Anda :”;pil=getche();
switch(pil){
case’1′: clrscr();
cout<<”Masukan data :”;cin>>n;
IsEmpty();
insertdepan(n);
break;
case’2′: clrscr();
cout<<”Masukan data :”;cin>>n;
IsEmpty();
insertbelakang(n);
break;
case’3′: clrscr();
IsEmpty();
tampil();
break;
case’4′: clrscr();
IsEmpty();
hapusdepan();
break;
}
getch();
}while(pil!=’5′);
return 0;
}
int pil;
do{
clrscr();
int n;
cout<<”1.Insert Depan”<<endl;
cout<<”2.Insert Belakang”<<endl;
cout<<”3.Display”<<endl;
cout<<”4.Delete”<<endl;
cout<<”5.Exit”<<endl;
cout<<”Masukan Pilihan Anda :”;pil=getche();
switch(pil){
case’1′: clrscr();
cout<<”Masukan data :”;cin>>n;
IsEmpty();
insertdepan(n);
break;
case’2′: clrscr();
cout<<”Masukan data :”;cin>>n;
IsEmpty();
insertbelakang(n);
break;
case’3′: clrscr();
IsEmpty();
tampil();
break;
case’4′: clrscr();
IsEmpty();
hapusdepan();
break;
}
getch();
}while(pil!=’5′);
return 0;
}
contoh yang ke 2 :
/* membuat linked list */
typedef struct myLinkedList {
char nim[10];
char nama[35];
int nilai;
typedef struct myLinkedList {
char nim[10];
char nama[35];
int nilai;
myLinkedList *next;
};
};
myLinkedList *head;
/* keadaan awal */
void init() {
head = NULL;
}
void init() {
head = NULL;
}
/* fungsi untuk mengecek linked list
* apakah kosong atau tidak
* jika kosong maka bernilai 1
* jika tidak kosong maka bernilai 0
*/
int paKosong() {
if (head == NULL) return 1;
else return 0;
}
* apakah kosong atau tidak
* jika kosong maka bernilai 1
* jika tidak kosong maka bernilai 0
*/
int paKosong() {
if (head == NULL) return 1;
else return 0;
}
/**
* fungsi untuk menambahkan data dari depan node
*/
void tambahDepan() {
* fungsi untuk menambahkan data dari depan node
*/
void tambahDepan() {
myLinkedList *baru;
baru = new myLinkedList;
baru = new myLinkedList;
cout << “Masukkan Data lengkap
di bawah ini : ” <<>> baru->nim;
cout << “Nama : “; cin >> baru->nama;
cout << “Nilai : “; cin >> baru->nilai;
cout << “Nama : “; cin >> baru->nama;
cout << “Nilai : “; cin >> baru->nilai;
baru->next = NULL;
if (paKosong() == 1) {
head = baru;
head->next = NULL;
} else {
baru->next = head;
head = baru;
}
}
/**
* fungsu untuk menambahkan data dari depan node
*/
head = baru;
head->next = NULL;
} else {
baru->next = head;
head = baru;
}
}
/**
* fungsu untuk menambahkan data dari depan node
*/
void tambahBelakang() {
myLinkedList *baru, *bantu;
baru = new myLinkedList;
baru = new myLinkedList;
cout << “Masukkan Data lengkap
di bawah ini : ” <<>> baru->nim;
cout << “Nama : “; cin >> baru->nama;
cout << “Nilai : “; cin >> baru->nilai;
cout << “Nama : “; cin >> baru->nama;
cout << “Nilai : “; cin >> baru->nilai;
baru->next = NULL;
if (paKosong() == 1) {
head = baru;
head->next = NULL;
} else {
bantu = head;
while (bantu->next != NULL) {
bantu = bantu->next;
head = baru;
head->next = NULL;
} else {
bantu = head;
while (bantu->next != NULL) {
bantu = bantu->next;
}
bantu->next = baru;
}
}
bantu->next = baru;
}
}
/**
* fungsi untuk menghapus dari depan node
*/
void hapusDepan() {
myLinkedList *hapus;
char *data;
if (paKosong() == 0) {
if (head->next != NULL) {
hapus = head;
data = hapus->nim;
head = head->next;
delete hapus;
} else {
data = head->nim;
head = NULL;
}
* fungsi untuk menghapus dari depan node
*/
void hapusDepan() {
myLinkedList *hapus;
char *data;
if (paKosong() == 0) {
if (head->next != NULL) {
hapus = head;
data = hapus->nim;
head = head->next;
delete hapus;
} else {
data = head->nim;
head = NULL;
}
cout <<>
/**
* fungsi untuk menghapus dari belakang node
*/
void hapusBelakang() {
myLinkedList *hapus, *bantu;
char *data;
if (paKosong() == 0) {
if (head->next != NULL) {
bantu = head;
while(bantu->next->next != NULL) {
bantu = bantu->next;
}
* fungsi untuk menghapus dari belakang node
*/
void hapusBelakang() {
myLinkedList *hapus, *bantu;
char *data;
if (paKosong() == 0) {
if (head->next != NULL) {
bantu = head;
while(bantu->next->next != NULL) {
bantu = bantu->next;
}
hapus = bantu->next;
data = hapus->nim;
bantu->next = NULL;
delete hapus;
} else {
data = head->nim;
head = NULL;
}
cout <<>
data = hapus->nim;
bantu->next = NULL;
delete hapus;
} else {
data = head->nim;
head = NULL;
}
cout <<>
cout << “Tekan Enter untuk
kembali ke Menu!”; getch(); }
/**
* fungsi untuk menampilkan data linked list
*/
* fungsi untuk menampilkan data linked list
*/
void tampilData() {
int no = 1;
int no = 1;
myLinkedList *bantu;
bantu = head;
if (paKosong() == 0) {
while (bantu != NULL) {
cout << “No. : ” <<>nim <<>nama <<>nilai <<>
bantu = head;
if (paKosong() == 0) {
while (bantu != NULL) {
cout << “No. : ” <<>nim <<>nama <<>nilai <<>
no++;
bantu = bantu->next;
}
cout <<>
bantu = bantu->next;
}
cout <<>
} else {
cout << “Data masih kosong ” <<>
cout << “Data masih kosong ” <<>
/**
* fungsi Menu, Untuk menentukan linked list mana
* yang dipilih
*/
int menu() {
int pilihan;
* fungsi Menu, Untuk menentukan linked list mana
* yang dipilih
*/
int menu() {
int pilihan;
cout << “+———————-+\n”; cout
<< “| MENU PILIHAN |\n”; cout << “+———————-+\n”; cout << “|
1. Tambah Depan |\n”; cout << “| 2. Tambah Belakang |\n”; cout <<
“| 3. Hapus Depan |\n”; cout << “| 4. Hapus Belakang |\n”; cout <<
“| 5. Tambah Tengah |\n”; cout << “| 6. Hapus Tengah |\n”; cout <<
“| 7. TampilData |\n”; cout << “| 8. Keluar |\n”; cout <<
“+———————-+\n”; cout << “| PILIHAN ANDA ? [ ] |\n”; cout <<
“+———————-+\n”;
cin >> pilihan;
return pilihan;
}
return pilihan;
}
/**
* fungsi operasi data
*/
void operasiData() {
int pilih;
* fungsi operasi data
*/
void operasiData() {
int pilih;
do {
pilih = menu();
pilih = menu();
switch (pilih) {
case 1 :
tambahDepan();
break;
case 2 :
tambahBelakang();
break;
case 3 :
hapusDepan();
break;
case 1 :
tambahDepan();
break;
case 2 :
tambahBelakang();
break;
case 3 :
hapusDepan();
break;
case 4 :
hapusBelakang();
break;
case 5 :
tampilData();
break;
case 6:
hapusBelakang();
break;
case 5 :
tampilData();
break;
case 6:
cout << “Terima kasih coy!!!”;
break; } } while (pilih != 6); }
/**
* PROGRAM UTAMA
*/
void main() {
init();
operasiData();
}
* PROGRAM UTAMA
*/
void main() {
init();
operasiData();
}
Tidak ada komentar:
Posting Komentar