Sie sind auf Seite 1von 21

Macam – macam Linked List

1. Single Linked List :


Setiap node pada linked list mempunyai field yang berisi pointer ke node berikutnya dan juga
memiliki field yang berisi data.
Akhir linked list ditandai dengan node terakhir akan menunjuk ke null yang akan digunakan
sebagai kondisi berhenti saat pembacaan linked list.
Coding single linked list :
#include <stdio.h>

#include <iostream.h>

#include <conio.h>

struct TNode{

int data;

TNode *next;

};

TNode *head, *tail;

void init(){

head = NULL;

tail = NULL;

int isEmpty(){

if(tail == NULL) return 1;

else return 0;

void insertDepan(int databaru){

TNode *baru;

baru = new TNode;

baru->data = databaru;

baru->next = NULL;

if(isEmpty()==1){

head=tail=baru;

tail->next=NULL;

else {
baru->next = head;

head = baru;

cout<<"Data masuk\n";

void insertBelakang(int databaru){

TNode *baru,*bantu;

baru = new TNode;

baru->data = databaru;

baru->next = NULL;

if(isEmpty()==1){

head=baru;

tail=baru;

tail->next = NULL;

else {

tail->next = baru;

tail=baru;

cout<<"Data masuk\n";

void tampil(){

TNode *bantu;

bantu = head;

if(isEmpty()==0){

while(bantu!=NULL){

cout<<bantu->data<<" ";

bantu=bantu->next;

} else cout<<"Masih kosong\n";

}
void hapusDepan(){

TNode *hapus;

int d;

if (isEmpty()==0){

if(head!=tail){

hapus = head;

d = hapus->data;

head = head->next;

delete hapus;

} else {

d = tail->data;

head=tail=NULL;

cout<<d<<"terhapus";

} else cout<<"Masih kosong\n";

void hapusBelakang(){

TNode *bantu,*hapus;

int d;

if (isEmpty()==0){

bantu = head;

if(head!=tail){

while(bantu->next!=tail){

bantu = bantu->next;

hapus = tail;

tail=bantu;

d = hapus->data;

delete hapus;

tail->next = NULL;

}else {

d = tail->data;

head=tail=NULL;

}
cout<<d<<" terhapus\n";

} else cout<<"Masih kosong\n";

void clear()

TNode *bantu,*hapus;

bantu = head;

while(bantu!=NULL)

hapus = bantu;

bantu = bantu->next;

delete hapus;

head = NULL;

printf("CLEAR");

main()

int pil,databaru;

do

clrscr();

cout<<endl<<endl;

cout<<" ==========================="<<endl;

cout<<" = PROGRAM LINKED LIST ="<<endl;

cout<<" ==========================="<<endl;

cout<<" = 1. Insert Depan ="<<endl;

cout<<" = 2. Insert Belakang ="<<endl;

cout<<" = 3. Delete Depan ="<<endl;

cout<<" = 4. Delete Belakang ="<<endl;

cout<<" = 5. Tampil Data ="<<endl;

cout<<" = 6. Clear ="<<endl;


cout<<" = 7. Exit ="<<endl;

cout<<" ==========================="<<endl;

cout<<" Masukan Pilihan : ";cin>>pil;

switch (pil)

case 1:

cout<<"Masukkan Data = ";

cin>>databaru;

insertDepan(databaru);

break;

case 2:

cout<<"Masukkan Data = ";

cin>>databaru;

insertBelakang(databaru);

break;

case 3:

hapusDepan();

break;

case 4:

hapusBelakang();

break;

case 5:

tampil();

break;

}
case 6:

clear();

break;

case 7: {

return 0;

break;

default :

cout<<"\n Maaf, Pilihan yang anda pilih tidak tersedia!";

getch();

while(pil!=7);

2. Double Linked List


Linked list dengan menggunakan pointer, dimana setiap node memiliki 3 field, yaitu: 1 field
pointer yang menunjuk ke pointer berikutnya, 1 field pointer yang menunjuk ke pointer
sebelumnya dan field yang berisi data dari node tersebut. Pointer next dan prev-nya
menunjuk ke null.
Coding Double Link List :
#include <iostream.h>

#include <conio.h>

#include <stdio.h>

int pil; void pilih();

void buat_baru();

void tambah_belakang();
void tambah_depan();

void hapus_belakang();

void hapus_depan();

void tampil();

struct node

char nama [20];

int umur;

float tinggi;

node *prev, *next;

};

node *baru, *head=NULL, *tail=NULL,*hapus,*bantu;

void 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);

}
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 = new(node);

cout<<"input nama : ";cin>>baru->nama;

cout<<"input umur : ";cin>>baru->umur;

cout<<"input tinggi : ";cin>>baru->tinggi;

baru->prev=NULL;

baru->next=NULL;

void tambah_belakang()

buat_baru();

if(head==NULL)

head=baru;

tail=baru;

}
else

tail->next=baru;

baru->prev=tail;

tail=baru;

cout<<endl<<endl;

tampil();

void tambah_depan()

buat_baru();

if(head==NULL)

head=baru;

tail=baru;

else

baru->next=head;

head->prev=baru;

head=baru;

cout<<endl<<endl;

tampil();

void hapus_depan()

if (head==NULL)

cout<<"Kosong";

else if (head->next==NULL)

{
hapus=head;

head=NULL;

tail=NULL;

delete hapus;

else

hapus=head;

head=hapus->next;

head->prev=NULL;

delete hapus;

cout<<endl<<endl;

tampil();

void hapus_belakang()

if (head==NULL)

cout<<"Kosong";

else if (head->next==NULL)

hapus=head;

head=NULL;

tail=NULL;

delete hapus;

else

hapus=tail;

tail=hapus->prev;

tail->next=NULL;

delete hapus;

}
cout<<endl<<endl;

tampil();

void tampil()

if (head==NULL)

cout<<"Kosong";

else

bantu=head;

while(bantu!=NULL)

cout<<" nama : "<<bantu->nama;

cout<<" umur : "<<bantu->umur;

cout<<" tinggi : "<<bantu->tinggi<<endl;

bantu=bantu->next;

getch();

3. Single Circular Linked List


Single Linked List yang pointer next-nya menunjuk ke dirinya sendiri, jika terdiri dari
beberapa node maka pointer terakhirnya akan menunjuk ke pointer terdepannya.
Coding Single Circular Linked List :
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <string.h>

void creation(int);
void display();
void insertion(int,int);
void deletion(int);

struct list
{
int num;
struct list *next;
}*head, *l;

void main()
{
int n1,ch,pos,val;
clrscr();
printf("program single linked list circular\n\n");
printf("Masukkan no node yang akan di masukkan : ");
scanf("%d",&n1);

do
{

printf("\n1.pembuatan\n2.menyisipkan\n3.menghapuskan\n4.menampilkan\n5.keluar\n\n");
printf("\masukkan pilihan anda : ");
scanf("%d",&ch);
switch(ch)
{
case 1:
creation(n1);
break;
case 2:
printf("\n\nmasukkan posisi yang akan di sisipkan : ");
scanf("%d",&pos);
printf("\n\nmasukkan nilai : ");
scanf("%d",&val);
insertion(pos,val);
break;
case 3:
printf("\n\masukkan posisi yang akan di hapus : ");
scanf("%d",&pos);
deletion(pos);
break;
case 4:
display();
getch();
break;
case 5:
exit(0);
}
}while(ch!=5);

getch();
}

/* CREATION */
/* -------- */

void creation(int n1)


{
int i,n;
head=((struct list *)malloc(sizeof(struct list)));
l=head;
for(i=0;i<n1;i++)
{
printf("masukkan nilai node : ",i+1);
scanf("%d",&n);
l->num=n;
l->next=((struct list *)malloc(sizeof(struct list)));
l=l->next;
}
l->next=0;

/* DISPLAY */
/* ------- */

void display()
{
l=head;
printf("\nnode yang telah dimasukkan adalah : ");

while(l->next>0)
{
printf("%d\t",l->num);
l=l->next;
}
}

/* INSERTION */
/* --------- */

void insertion(pos,val)
{
int i;
struct list *x,*y;
l=head;
i=2;
if(pos==1)
{
x=((struct list *)malloc(sizeof(struct list)));
x->num=val;
x->next=l;
head=x;
}
else
{
while(l->next>0)
{
if(pos==i-1)
{
x=((struct list *)malloc(sizeof(struct list)));
x->num=val;
x->next=l;
y->next=x;
}
y=l;
l=l->next;
i++;
}
}
}

/* DELETION */
/* -------- */

void deletion(pos)
{
int i;
struct list *y;
l=head;
i=1;
if(pos==1)
{ head=l->next; }
else
{
while(l->next>0)
{
if(pos==i)
{ l=l->next;
y->next=l;
break;
}
y=l;
l=l->next;
i++;
}
}
}

4. Double Circular Linked List


Double Linked List yang pointer next dan prev-nya menunjuk ke dirinya sendiri secara
circular.
Coding Double Circular Linked List :
#include<stdio.h>

#include<stdlib.h>

struct node

struct node *prev;

struct node *next;

int data;

};

struct node *head;

void insertion_beginning();

void insertion_last();

void deletion_beginning();

void deletion_last();

void display();
void search();

void main ()

int choice =0;

while(choice != 9)

printf("\n*********Main Menu*********\n");

printf("\nChoose one option from the following list ...\n");

printf("\n===============================================\n");

printf("\n1.Insert in Beginning\n2.Insert at last\n3.Delete from Beginning\n4.Delete from


last\n5.Search\n6.Show\n7.Exit\n");

printf("\nEnter your choice?\n");

scanf("\n%d",&choice);

switch(choice)

case 1:

insertion_beginning();

break;

case 2:

insertion_last();

break;

case 3:

deletion_beginning();

break;

case 4:

deletion_last();

break;

case 5:

search();

break;

case 6:

display();

break;

case 7:

exit(0);
break;

default:

printf("Please enter valid choice..");

void insertion_beginning()

struct node *ptr,*temp;

int item;

ptr = (struct node *)malloc(sizeof(struct node));

if(ptr == NULL)

printf("\nOVERFLOW");

else

printf("\nEnter Item value");

scanf("%d",&item);

ptr->data=item;

if(head==NULL)

head = ptr;

ptr -> next = head;

ptr -> prev = head;

else

temp = head;

while(temp -> next != head)

temp = temp -> next;

temp -> next = ptr;


ptr -> prev = temp;

head -> prev = ptr;

ptr -> next = head;

head = ptr;

printf("\nNode inserted\n");

void insertion_last()

struct node *ptr,*temp;

int item;

ptr = (struct node *) malloc(sizeof(struct node));

if(ptr == NULL)

printf("\nOVERFLOW");

else

printf("\nEnter value");

scanf("%d",&item);

ptr->data=item;

if(head == NULL)

head = ptr;

ptr -> next = head;

ptr -> prev = head;

else

temp = head;

while(temp->next !=head)

{
temp = temp->next;

temp->next = ptr;

ptr ->prev=temp;

head -> prev = ptr;

ptr -> next = head;

printf("\nnode inserted\n");

void deletion_beginning()

struct node *temp;

if(head == NULL)

printf("\n UNDERFLOW");

else if(head->next == head)

head = NULL;

free(head);

printf("\nnode deleted\n");

else

temp = head;

while(temp -> next != head)

temp = temp -> next;

temp -> next = head -> next;

head -> next -> prev = temp;

free(head);
head = temp -> next;

void deletion_last()

struct node *ptr;

if(head == NULL)

printf("\n UNDERFLOW");

else if(head->next == head)

head = NULL;

free(head);

printf("\nnode deleted\n");

else

ptr = head;

if(ptr->next != head)

ptr = ptr -> next;

ptr -> prev -> next = head;

head -> prev = ptr -> prev;

free(ptr);

printf("\nnode deleted\n");

void display()

struct node *ptr;


ptr=head;

if(head == NULL)

printf("\nnothing to print");

else

printf("\n printing values ... \n");

while(ptr -> next != head)

printf("%d\n", ptr -> data);

ptr = ptr -> next;

printf("%d\n", ptr -> data);

void search()

struct node *ptr;

int item,i=0,flag=1;

ptr = head;

if(ptr == NULL)

printf("\nEmpty List\n");

else

printf("\nEnter item which you want to search?\n");

scanf("%d",&item);

if(head ->data == item)


{

printf("item found at location %d",i+1);

flag=0;

else

while (ptr->next != head)

if(ptr->data == item)

printf("item found at location %d ",i+1);

flag=0;

break;

else

flag=1;

i++;

ptr = ptr -> next;

if(flag != 0)

printf("Item not found\n");

Das könnte Ihnen auch gefallen