RANGKUMAN STRUKTUR DATA

Taufik Akhmad Setiadi

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

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



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