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
Ilustrasi single linked list
circular:
Proses
pembuatan
Untuk
pembatab head digunakan fungsi malloc untk menyediakan ruang memory bagi
pointer head data pertama yang dibuat langsung diletakkan pada head dan membuat
pointer untuk next
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;
penyisipan
pertama
melakkan pengecekan apakah ini data pertama yang akan di masukkan dengan meihat
pada pointer next bernilai 0
selanjutnya
kita akan memasukkan data yang akan mengganti posisi dari head
x=((struct
list *)malloc(sizeof(struct list)));
x->num=val;
x->next=l;
y->next=x;
penghapusan
pertama
melakukan pengecekan apakah yang dihapus pada head jika tidak maka nilai yang
akan dihapus akan merubah posisinya dengan memindahkan nilai pointer head
{
head=l->next; }
ke pointer
next dan dilakukan proses perpindahan
(pos==i)
{
l=l->next;
y->next=l;
}
y=l;l=l->next;
CARA KERJA
input data ke
head
head
1 << pointer next
menyisipkan
data pertama misal 3
3 1 posisi head berposisi 1 pindah ke 2 dan
kemudian selanjutnya
pada proses
penghapusan ini merupakan perubahan arah head ke pointer next baru di hapus
Catatan :
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
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
Contoh Program :
/*program
single linked list circular
#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++;
}
}
}

0 komentar:
Posting Komentar