Pages

RSS

Program Linked List



Saya mencoba untuk membuat Program C tentang Linked List seperti di bawah ini:
//Nama    : Muhammad Dahlan
//Nim    : 10651035
//Prodi    : TIF(K)
#include<stdio.h>
#include<stdlib.h>
struct tnode {
    int info;
    struct tnode *next;
    struct tnode *prev;
};
struct tnode *head=NULL;
void tambah_depan()
{
    int q;
    struct tnode *node_baru;
    node_baru=malloc(sizeof(struct tnode));
    printf("\n-> Silahkan Masukkan Data :");scanf("%d",&q);
    node_baru->info=q;
    node_baru->next=NULL;
    node_baru->prev=NULL;
    if(head==NULL)
    {
        head=node_baru;
        head->next=NULL;
        head->prev=NULL;
    }

    else
    {
        node_baru->next=head;
        head->prev=node_baru;
        head=node_baru;
    }
    printf("Data %d Berhasil Masuk Di Depan...!!\n",q);
}
void hapus_depan()
{
    struct tnode *bantu;
    int x;
    if(head==NULL)
    {
        printf("LInk List Kosong...!!\n");
    }
    else
    {
        bantu=head;
        if(head->next!=NULL)
        {
            x=bantu->info;
            head=head->next;
            head->prev=NULL;
            free(bantu);
        }
        else
        {
            x=bantu->info;
            head=NULL;
        }
        printf("Data %d Berhasil Di Hapus...!!\n",x);
    }
}
void tambah_belakang()
{
    int q;
    struct tnode *baru,*bantu;
    baru=malloc(sizeof(struct tnode));
    printf("\n-> Silahkan Masukkan Data :");scanf("%d",&q);
    baru->info=q;
    baru->next=NULL;
    baru->prev=NULL;
    if(head==NULL)
    {
        head=baru;
        head->next=NULL;
        head->prev=NULL;
    }
    else
    {
        bantu=head;
        while(bantu->next!=NULL)
        {
            bantu=bantu->next;
        }
        bantu->next=baru;
        baru->prev=bantu;
    }
    printf("Data %d Berhasil Ditambah Di Belakang...!!\n",q);
}
void hapus_belakang()
{
    struct tnode *bantu;
    int x;
    if(head!=NULL)
    {
        bantu=head;
        if(head->next!=NULL)
        {
            while(bantu->next!=NULL)
            {
                bantu=bantu->next;
            }
            x=bantu->info;
            bantu->prev->next=NULL;
            free(bantu);
        }
        else
        {
            x=bantu->info;
            head=NULL;
        }
        printf("Data %d Terhapus Dibelakang...!!\n",x);
    }
    else
    {
        printf("Link List Kosong...!!\n");
    }
}
void tambah_tengah()
{
    int q,posisi;
    struct tnode *baru,*bantu;
    int n=1;
    baru=malloc(sizeof(struct tnode));
    printf("\n-> Silahkan Masukkan Data :");scanf("%d",&q);
    printf("\n-> Silahkan Pilih Posisi :");scanf("%d",&posisi);
    baru->info=q;
    baru->next=NULL;
    baru->prev=NULL;
    bantu=head;
    while(n<(posisi-1))
    {
        bantu=bantu->next;
        n++;
    }
    baru->next=bantu->next;
    baru->prev=bantu->prev;
    bantu->next=baru;
    bantu->prev=baru;
    printf("Data %d Berhasil di tambah Di Posisi %d...!!\n",q,posisi);
}
void hapus_tengah()
{
    int posisi;
    struct tnode *bantu,*bantu2;
    int n=1;
    printf("\n->Silahkan Pilih Posisi :");scanf("%d",&posisi);
    bantu=head;
    while(n<(posisi-1))
    {
        bantu=bantu->next;
        n++;
    }
    bantu2=bantu->next;
    bantu->next=bantu2->next;
    bantu2=bantu->prev;
    bantu->prev=bantu2->prev;
    free(bantu2);
    printf("Berhasil Di Hapus Di Posisi %d ...!\n",posisi);
}
void hapus_semua()
{
    struct tnode *bantu,*hapus;
    bantu=head;
    while(bantu!=NULL)
    {
        hapus=bantu;
        bantu=bantu->next;
        free(hapus);
    }
    head=NULL;
    printf("Link List Terhapus Semua...!!\n");
}
void tampil_node()
{
    struct tnode *bantu;
    if(head==NULL)
    {
        printf("Link List Kosong...!!\n");
    }
    else
    {
        bantu=head;
        while(bantu!=NULL)
        {
            printf("%d ->",bantu->info);
            bantu=bantu->next;
        }
        printf("NULL\n");
    }
}
main()
{
    int p,q;
    char x;
    printf("\n\t\t\tM.DAHLAN BELAJAR C PAKEK LINK LIST\n");
    printf("\t\t===================================================\n");
        printf("\n\t==>MENU TAMBAH YANG TERSEDIA :\n");
        printf("\n=>1. Tambah Depan.");         printf("\t\t=>5. Hapus Depan.\n");
        printf("\n=>2. Tambah Belakang.");         printf("\t\t=>6. Hapus Belakang.\n");
        printf("\n=>3. Tambah Tengah (sisip) ");printf("\t=>7. Hapus Tengah (sisip).\n");
        printf("\n=>4. Tampil Node.");             printf("\t\t=>8. Hapus Semua Node.\n");       
        p='y';
        while(p=='y' || p=='Y')
        {
            printf("\n\nMasukkan Pilihan : ");scanf("%d",&p);
            switch(p)
            {
                case 1: tambah_depan();
                break;
                case 2: tambah_belakang();
                break;
                case 3: tambah_tengah();
                break;
                case 4: tampil_node();
                break;
                case 5: hapus_depan();
                break;
                case 6: hapus_belakang();
                break;
                case 7: hapus_tengah();
                break;
                case 8: hapus_semua();
                break;
                default :printf("Eiiit..!!! Ma'af Pilihan Hanya Tersedia Delapan[8]...!!\n",p);
                printf("=========================================\n");
            }
        printf("\n\n==>Ulang Lagi..??(y/n): ");
        p=getche();
    }
}

  • Digg
  • Del.icio.us
  • StumbleUpon
  • Reddit
  • RSS

0 komentar:

Posting Komentar