Graphh delete

 #include <stdio.h>

#include <malloc.h>

struct vertex

{

    struct edge * jalur;

    int data;

    struct vertex * nextvertex;



};

struct edge

{

    struct vertex * tujuan;

    struct edge * nextedge;

    int beban;

};

struct graph

{

    struct vertex * first;



};

void newgraph(struct graph * g)

{

    g->first = NULL;

}

void buatvertex(struct graph * g,int data)

{

    struct vertex * baru  = (struct vertex*)malloc(sizeof(struct vertex));

    baru->data = data;

    baru->jalur  = NULL;

    baru->nextvertex  = NULL;

    if(g->first == NULL)

    {

        g->first = baru;

    }else

    {

        struct vertex * akhir  = g->first;

        while(akhir->nextvertex != NULL)

        {

            akhir = akhir->nextvertex;

        }

        akhir->nextvertex = baru;

    }

}

void buatedge(struct vertex * awal,struct vertex * tujuan,int beban)

{

    struct edge * buatedge = (struct edge*)malloc(sizeof(struct edge));

    buatedge->beban = beban;

    buatedge->tujuan = tujuan;

    buatedge->nextedge = NULL;

    if(awal->jalur == NULL)

    {

        awal->jalur = buatedge;

    }else

    {

        struct edge * akhir = awal->jalur;

        while(akhir->nextedge != NULL)

        {

            akhir = akhir->nextedge;

        }

        akhir->nextedge = buatedge;

    }

}

void print(struct graph * g)

{

    struct vertex * temp = g->first;

    if(temp != NULL)

    {

        printf("Data simpul \n");

        while(temp != NULL)

        {

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

            struct edge * tempedge = temp->jalur;

            while(tempedge != NULL)

            {

                printf("%d , %d \n",tempedge->tujuan->data,tempedge->beban);

                tempedge = tempedge->nextedge;

            }

            temp = temp->nextvertex;

        }

    }else

    {

        printf("kosong");

    }

}

struct vertex * cari(int data,struct graph  g)

{

    struct vertex * cari = g.first;

    int ketemu  = 0;

    struct vertex * hasil = NULL;

    while(ketemu == 0 && hasil == NULL )

    {

        if(cari->data == data)

        {

            ketemu = 1;

            hasil = cari;



        }else

        {

            cari = cari->nextvertex;

        }

    }

    return hasil;

}

void delall(struct vertex *g)

{

    struct edge * konz = g->jalur;

    struct edge * hapus = NULL;

    while(konz != NULL)

    {

        hapus = konz;

        konz = konz->nextedge;

        g->jalur  = konz;

        hapus->nextedge = NULL;

        free(hapus);

    }
}
void deledge(int tujuan,struct vertex * g)
{
    struct edge * hapus = g->jalur;
    if(hapus != NULL)
    {
        struct edge * prev = NULL;
        int ketemu = 0;
        while(hapus != NULL && ketemu == 0)
        {
            if(hapus->tujuan->data = tujuan)
            {
                ketemu = 1;
            }else
            {
                prev = hapus;
                hapus = hapus->nextedge;
            }
        }if(ketemu == 1)
        {
            if(prev == NULL)
            {
                g->jalur = hapus->nextedge;
                hapus->nextedge = NULL;
            }else
            {
                if(hapus->nextedge  == NULL)
                {
                    prev->nextedge = NULL;

                }else
                {
                    prev->nextedge = hapus->nextedge;
                    hapus->nextedge = NULL;
                }

            }
            free(hapus);
        }
    }

}
void delvertex(int c, struct graph * g)
{
    struct vertex *hapus = g->first;
    if(hapus != NULL)
    {
        struct vertex * prev = NULL;
        int ketemu = 0;
        while(hapus != NULL && ketemu == 0)
        {
            if(hapus->data == c)
            {
                ketemu = 1;
            }else
            {
                prev = hapus;
                hapus = hapus->nextvertex;
            }
        }
        if(ketemu == 1)
        {
            struct vertex * bantu = g->first;
            while(bantu != NULL)
            {
                if(bantu != hapus)
                {
                    deledge(hapus->data,bantu);
                }
                bantu = bantu->nextvertex;
            }
            delall(hapus);
            if(ketemu == 1)
        {
            if(prev == NULL)
            {
                g->first = hapus->nextvertex;
                hapus->nextvertex = NULL;
            }else
            {
                if(hapus->nextvertex  == NULL)
                {
                    prev->nextvertex = NULL;

                }else
                {
                    prev->nextvertex = hapus->nextvertex;
                    hapus->nextvertex = NULL;
                }

            }
            free(hapus);

        }
    }
}

}


int main()

{



    struct graph g;

    newgraph(&g);

    struct vertex *a1,*a2;

    buatvertex(&g,10);

    buatvertex(&g,9);

    a1 = cari(10,g);

    a2 = cari(9,g);

    buatedge(a1,a2,100);

    print(&g);

    print(&g);
    a1 = cari(10,g);
    deledge(9,a1);
    print(&g);







}

Komentar

Postingan populer dari blog ini

Pentingnya Mendapatkan Sertifikasi di Bidang IT/Sebagai Programmer

Pengantar Java Swing Bagian 1

Pengenalan UML