Langsung ke konten utama

Tugas Pertemuan 17

Circular Doubly Linked List adalah sederetan elemen yang saling berhubungan satu dengan yang lain, dimana pointer kiri simpul pertama menunjuk simpul terakhir dan pointer kanan simpul terakhi menunjuk simpul pertama. Semua simpul berhak menjadi simpul pertama. Jika suatu simpul dibuat menjadi simpul depan maka simpul yang ada di sebelah kiri merupakan simpul belakang.

Pendeklarasian simpul untuk Circular Doubly Linked List sama dengan pendeklarasian pada Doubly Linked List. Operasi yang ada pada Doubly Linked List juga berlaku pada Circular Doubly Linked List, hanya saja pada Circular tidak mengandung NULL, perhatikan gambar 8.

Operasi pada Circular Doubly Linked List

Operasi pada Circular Doubly Linked List juga dapat dilakukan penyisipan dan penghapusan simpul.

a. Operasi Penyisipan Simpul

Operasi penyisipan simpul ke suatu Linked List juga ada tiga, yaitu penyisipan simpul di depan, penyisipan simpul di belakang, dan penyisipan simpul di tengah. Karena semua simpul berhak menjadi simpul depan maka pointer penunjuk Linked List (CDL) dapat digerakkan ke seluruh simpul pada Linked List. Tetapi supaya kita tetap mempertahankan simpul yang ditunjuk CDL merupakan simpul depan maka kita dapat menggunakan suatu pointer bantu. Pointer bantu dapat digerakkan ke semua simpul pada Linked List. Di sini, simpul yang ditunjuk oleh CDL pertama sekali akan tetap dipertahankan sebagai simpul pertama atau simpul depan.

1. Penyisipan simpul depan

Langkah-langkah penyisipan simpul depan dapat dilakukan seperti berikut ini:

  • Jika Linked List belum ada (NULL) maka simpul baru menjadi awal Linked List (CDL = Baru).
  • Jika Linked List sudah ada maka penyisipan dilakukan dengan:
  • Pointer kanan simpul baru menunjuk CDL (Baru->Kanan = CDL).
  • Pointer kiri simpul baru menunjuk yang ditunjuk pointer kiri CDL (Baru->Kiri = CDL->Kiri).
  • Pointer kanan dari simpul yang ditunjuk pointer kiri CDL menunjuk simpul baru (CDL->Kiri->Kanan = Baru).
  • Pointer kiri CDL menunjuk simpul baru (CDL->Kiri = Baru).
  • Pointer CDL menunjuk simpul baru (CDL = Baru).

Misalkan kita memiliki Linked List yang terdiri dari tiga simpul dengan berisi masing-masing informasi A, B, dan C. Juga memiliki suatu simpul baru yang berisi informasi D. Simpul baru yang akan disisipkan di bagian depan Linked List. Skema penyisipan simpul depan dapat dilihat pada Gambar 9.


Fungsi penyisipan simpul depan dengan mengikuti langkah-langkah dan gambar 9 di atas dapat dilihat berikut ini.


void Sisip_Depan(simpul &CDL, char elemen)

{

  simpul baru;

  baru = (simpul) malloc(sizeof(simpul));

  baru->Isi = elemen;

  baru->kanan = baru;

  baru->kiri = baru;

  if(CDL == NULL) CDL=baru;

  else

  {

    baru->kanan = CDL;

    baru->kiri = CDL->kiri;

    CDL->kiri->kanan = baru;

    CDL->kiri = baru;

  }

}


2. Penyisipan simpul belakang

Langkah-langkah penyisipan simpul baru pada Linked List di posisi belakang dapat dilakukan seperti berikut ini:

  • Jika Linked List belum ada (NULL) maka simpul baru menjadi awal Linked List (CDL = Baru).
  • Jika Linked List sudah ada maka penyisipan dilakukan dengan:
  • Pointer kanan simpul baru menunjuk CDL (Baru->Kanan =CDL).
  • Pointer kiri simpul baru menunjuk yang ditunjuk pointer kiri CDL (Baru->Kiri = CDL->Kiri).
  • Pointer kanan dari simpul yang ditunjuk pointer Kiri CDL menunjuk simpul baru (CDL->Kiri->Kanan = Baru).
  • Pointer kiri CDL menunjuk simpul baru (CDL->Kiri = Baru).

Contoh Program C++


#include <iostream>
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#pragma argsused

using namespace std;

typedef char data;
typedef struct strSimpul
{
    data masukkan;
    struct strSimpul *kanan;
    struct strSimpul *kiri;
}Simpul;

typedef struct strSeneraiGanda
{
    Simpul *awal;
    Simpul *akhir;
}SeneraiGanda;

void buat (SeneraiGanda *q)
{
    q->awal=NULL;
    q->akhir=NULL;
}

void Tambah_Depan(SeneraiGanda *q, data elemen)
{
    Simpul *baru=new Simpul();
    baru->masukkan=elemen;
    if (q->awal==NULL && q->akhir==NULL)
    {
        q->awal=baru;
        q->akhir=baru;
        baru->kanan=NULL;
        baru->kiri=NULL;
    }
    else
    {
        q->awal->kiri=baru;
        baru->kanan=q->awal;
        q->awal=baru;
        q->awal->kiri=NULL;
    }
}

void Baca_Maju(SeneraiGanda *q)
{
    Simpul *bantu=new Simpul();
    bantu=q->awal;
    while (bantu!=NULL)
    {
        cout<<bantu->masukkan<<" ";
        bantu=bantu->kanan;
    }
    cout<<endl;
}

main()
{
    SeneraiGanda *SnrGd=new SeneraiGanda();
    buat (SnrGd);
    data hasil;
    char pilih='1';
    while (pilih=='1' || pilih=='2' || pilih=='3')
    {
        cout<<"Pilih menu"<<endl;
        cout<<"1. Tambah Depan"<<endl;
        cout<<"2. Tambah Belakang"<<endl;
        cout<<"3. Baca Maju"<<endl;
        cout<<"4. Selesai"<<endl;
        cout<<"Pilihan = ";cin>>pilih;
        switch(pilih)
        {
            case '1':
                {
                   cout<<"Masukkan datanya : ";
                   cin>>hasil;
                   Tambah_Depan(SnrGd, hasil);
                   system("cls");
                } break;
            case '2':
                {
                    system("cls");
                    Baca_Maju(SnrGd);
                } break;
            default :
                {
                    cout<<"Selesai. Tekan enter";
                } break;

        }
    }
    getch();
    delete (SnrGd);
}






Komentar

Postingan populer dari blog ini

Tugas Pertemuan 6

SOAL 1. Buatlah suatu program Animasi Antrian dengan 4 buah pilihan : INSERT, DELETE, CETAK ANTRIAN, QUIT. Jika dipilih INSERT : program akan meminta user untuk menginput sebuah karakter yang akan dimasukan kedalam antrian Jika dipilih DELETE : maka karakter pertama masuk akan dikeluarkan dari antrian Jika dipilih CETAK ANTRIAN : komputer menampilkan karakter yang ada pada antrian Jika dipilih QUIT : program keluar   Jawaban #include<stdio.h> #include #include #include #define n 10 using namespace std; void INSERT(); void DELETE(); void CETAKLAYAR(); void Inisialisasi(); void RESET(); int PIL,F,R; char PILIHAN [1],HURUF; char Q[n]; void main ( ) { Inisialisasi(); do { cout >PILIHAN; PIL=atoi(PILIHAN); switch (PIL) { case 1: INSERT (); break; case 2: DELETE(); break; case 3: CETAKLAYAR (); break; default: cout >HURUF; Q[++R]=HURUF; } else cout
Digital marketing dalam perspektif seorang pengusaha atau pebisnis lebih kepada sistem pemasaran dengan menggunakan media internet. Sudah pasti, di dalamnya termasuk mobile phone hingga beberapa situs jejaring sosial lainnya. Hanya saja, agar Teknik ini lebih mengena kepada sasaran, sepertinya Teknik promosi lebih dikesampingkan dan mengutamakan komunikasi. Menjalin hubungan secara personal dengan konsumen dengan cara mendengar keluhan atau saran akan membuat pelanggan lebih merasa dihargai. Yang pada akhirnya akan memberikan nilai tambah terhadap perkembangan bisnis terutama brand perusahaan. Terlihat sederhana namun sulit untuk dipastikan terlebih bagi mereka yang kurang memahami akan pengertian digital marketing sebenarnya. (Daengs, Achmad, Andi Farouq, 2016 : 287-293). Menurut Urban (2004:2) Digital Marketing menggunakan internet dan teknologi informasi untuk memperluas dan meningkatkan fungsi marketing tradisional. Definisi ini berkonsentrasi pada seluruh marketing tradisi...

Tugas Pertemuan 14

  Latihan  Pohon dengan jumlah simpul=273 merupakan Full atau atau Complete tree  Berapa kedalamannya?  Nomor berapa simpul terkiri dari level tersebut?  Berapa jumlah maksimum simpul pada level 7  Nomor berapa anak kanan dari simpul ke 180? Ada dilevel berapa anak tersebut  Nomor berapa orang tua dari simpul ke 83? Ada di level berapa orang tua tertsebut?  Jawaban : Complete tree 9 level Nomor 256 64 Simpul tidak ada, karena rumus anak kanan adalah 2n+1, maka 2(180)+1=361. sementara jumlah simpul sebanyak 273. orang tua dari simpul ke 83 adalah 41, berada pada level 6. Kirimkan Ini lewat Email BlogThis! Berbagi ke Twitter Berbagi ke Facebook