Sabtu, 01 Desember 2012

CONTOH PROGRAM NODE PADA BAHASA C


#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <string.h>
#define N 100

struct dclinklist{
    struct dclinklist *prev;          /** Stores address of previous node **/
    int roll_no;                       /** stores roll number **/
    char name[N];                     /** stores Name **/
    float marks;                      /** stores Marks **/
    struct dclinklist *next;         /** stores address of next node **/
};

/** Redefining dclinklist as node **/
typedef struct dclinklist node;

void init(node*);     /** Input function **/
void ins_aft(node*);  /** Function inserting before **/
node* ins_bef(node*); /** Function inserting after **/
node* del(node*);     /** Function deleting a node **/
void search(node*);   /** Function for searching node **/
void disp(node*);     /** Function for displaying node **/
void rollsrch(node*); /** Function for searching node by roll number **/
void namesrch(node*); /** Function for searching node by name **/
void marksrch(node*); /** Function for searching node by marks **/

/*** Main Function ***/
void main(){
    node *head;
    char ch;                  /* Choice inputing varible */
    int opt;                  /* Option inputing variable*/
    static int flag=0;        /* Unchanged after iniialization */
    clrscr();
    head=(node*)malloc(sizeof(node));
    head->next=NULL; /* NULL is being over written in init function */
    head->prev=NULL;
    do{
    again:
            printf("\nInput pilihan\n");
            printf("\n1. Inisialisasi node\n");      
            printf("\n2. Insert sebelum spesifik node\n");
            printf("\n3. Insert setelah spesifik node\n");
            printf("\n4. Delete node \n");
            printf("\n5. Search Node\n");
            printf("\n6. Display Semua node\n");
            scanf("%d",&opt);
    if(flag==0 && opt!=1){
        printf("\nHarus Inisialisasi Node terlebih dahulu sebelum input!\n");
        goto again;
    }
    if(flag==1 && opt==1){
        printf("\nInisialiasi cuma bisa dilakukan sekali!\n");
        printf("\nInput sebuah node sekarang\n");
        goto again;
    }
    if(opt==4 && head->next==head){
        printf("\nProses penghapusan tidak boleh dilakukan, jika node hanya terdiri dari 1!\n");
        goto again;
    }
    if(flag==0 && opt==1)
        flag=1;
    switch(opt){
    case 1:
        init(head);
        break;
    case 2:
        head=ins_bef(head);
        break;
    case 3:
        ins_aft(head);
        break;
    case 4:
        head=del(head);
        break;
    case 5:
        search(head);
        break;
    case 6:
        disp(head);
        break;
    default:
    break;
    }
    printf("\nMasih mau melanjutkan proses![y/n]\n");
    ch=(char)getche();
    }while(ch=='Y' || ch=='y');
    printf("\nDone by \"LAB TI Univ-Gunadarma J1\"\n");
    printf("\nPress any key to exit\n");
    getch();
}

/*** Function for inputing data ***/
void init(node *start){
    start->prev=start;
    printf("\nMasukkan Roll number\n");
    scanf("%d",&start->roll_no);
    printf("\nMasukkan nama\n");
    fflush(stdin);
    gets(start->name);
    printf("\nMasukkan Tanda\n");
    scanf("%f",&start->marks);
    start->next=start;
}

/*** Function for inserting a node after a specified node ***/
void ins_aft(node *start){
    int rno;                  /* Roll number for inserting a node */
    int flag=0;
    node *newnode;            /* New inputed node*/
    node *current;            /* Node for travelling the linked list*/
    newnode=(node*)malloc(sizeof(node));
    printf("\nMasukkan setelah Roll Number berapa kamu mau menyisipkan!\n");
    scanf("%d",&rno);
    init(newnode);
    current=start;
    while(current->next!=start){
        /***  Insertion checking for all nodes except last  ***/
        if(current->roll_no==rno){
            newnode->next=current->next;
            current->next->prev=newnode;
            current->next=newnode;
            newnode->prev=current;
            flag=1;
        }
        current=current->next;
    }
    if(flag==0 && current->next==start && current->roll_no==rno){
        /***  Insertion checking for last node  ***/
        newnode->next=current->next;     /* Start is being copied */
        current->next->prev=newnode;
        current->next=newnode;
        newnode->prev=current;
        flag=1;
    }
    if(flag==0 && current->next==NULL)
        printf("\nNo match found\n");
}

/*** Function for inserting a node before a specified node ***/
node* ins_bef(node *start){
    int rno;                  /* Roll number for inserting a node*/
    node *newnode;            /* New inputed node */
    node *current;            /* Node for travelling the linked list*/
    newnode=(node*)malloc(sizeof(node));
    printf("\nMasukkan sebelum Roll Number berapa kamu  mau menyisipkan!\n");
    scanf("%d",&rno);
    init(newnode);
    current=start;
    if(current->roll_no==rno){
        /*** Insertion checking for first node ***/
        newnode->next=current;
        current->prev=newnode;
        while(current->next!=start)
            current=current->next;
        newnode->prev=current;
        current->next=newnode;
        start=newnode;
        return(start);
    }
    while(current->next!=start){
        /*** Insertion checking for all node except first ***/
        if(current->next->roll_no==rno){
            newnode->next=current->next;
            current->next->prev=newnode;
            current->next=newnode;
            newnode->prev=current;
            return(start);
        }
        current=current->next;
    }
    /*If the function does not return from any return statement.There is no match to insert before the input  roll number. */
    printf("\nMatch not found\n");
    return(start);
}

/*** Function for deleting ***/
node* del(node *start){
    int rno;                  /* Roll number for deleting a node*/
    node *delnode;            /* Node to be deleted */
    node *current;            /* Node for travelling the linked list*/
    printf("\nEnter the roll number whose node you want to delete\n");
    scanf("%d",&rno);
    current=start;
    if(current->roll_no==rno) {
        /***  Checking condition for deletion of first node  ***/
        delnode=current; /*  Unnecessary step  */
        while(current->next!=start)
        current=current->next;
        current->next=start->next;
        start->next->prev=current;
        start=start->next;
        free(delnode);
        return(start);
    }
    else{
        while(current->next->next!=start){
            /***  Checking condition for deletion of   ***/
            /*** all nodes except first and last node  ***/
            if(current->next->roll_no==rno){
                delnode=current->next;
                current->next=current->next->next;
                current->next->prev=current;
                free(delnode);
                return(start);
            }
            current=current->next;
        }
        if(current->next->next==start && current->next->roll_no==rno){
            /***  Checking condition for deletion of last node  ***/
            delnode=current->next;
            free(delnode);
            current->next=start;
            return(start);
        }}
    printf("\nMatch not found\n");
    return(start);
}

/*** Function for searching ***/
void search(node *start){
    int ch;                   /* Choice inputing variable */
    printf("\nPencarian Berdasarkan kriteria\n");
    printf("\n1. Roll number\n");
    printf("\n2. Nama\n");
    printf("\n3. Tanda\n");
    scanf("%d",&ch);
    switch(ch){
    case 1:
        rollsrch(start);
        break;
    case 2:
        namesrch(start);
        break;
    case 3:
        marksrch(start);
        break;
    default:
        rollsrch(start);
    }}

/*** Function for searching ***/
void rollsrch(node *start){
    int rno;                  /* Roll-number to be searched */
    node *current;            /* Node for travelling the linked list*/
    printf("\nMasukkan Roll Number berapa yang mau dicari!\n");
    scanf("%d",&rno);
    current=start;
    while(current->next!=start){
        if(current->roll_no==rno)
            printf("\n%d\t%s\t%f\n",current->roll_no,current->name,current->marks);
        current=current->next;
    }
        if(current->next==start && current->roll_no==rno)
        printf("\n%d\t%s\t%f\n",current->roll_no,current->name,current->marks);
}

/*** Function for searching ***/
void namesrch(node *start){
    char arr[20];             /* Name to be searched*/
    node *current;            /* Node for travelling the linked list*/
    printf("\nInput nama yang mau di cari!\n");
    fflush(stdin);
    gets(arr);
    current=start;
    while(current->next!=start){
        if(strcmp(current->name,arr)==NULL)
            printf("\n%d\t%s\t%f\n",current->roll_no,current->name,current->marks);
        current=current->next;
    }
    if(current->next==start && strcmp(current->name,arr)==NULL)
        printf("\n%d\t%s\t%f\n",current->roll_no,current->name,current->marks);
}
/*** Function for searching ***/
void marksrch(node *start){
    float marks;              /* Marks to be searched */
    node *current;            /* Node for travelling the linked list*/
    printf("\nInput tanda yang mau dicari!\n");
    scanf("%f",&marks);
    current=start;
    while(current->next!=start){
        if(current->marks==marks)
            printf("\n%d\t%s\t%f\n",current->roll_no,current->name,current->marks);
        current=current->next;
    }
    if(current->next==start && current->marks==marks)
        printf("\n%d\t%s\t%f\n",current->roll_no,current->name,current->marks);
}
/*** Function for displaying the linked list ***/
void disp(node *start){
    node *current;            /* Node for travelling the linked list*/
    current=start;
    while(current->next!=start) {
        printf("\n %d  %s  %f",current->roll_no,current->name,current->marks);
        current=current->next;
    }
    printf("\n %d  %s  %f",current->roll_no,current->name,current->marks);
}


kalo mau lihat output programnya klik disini.

Tidak ada komentar:

Posting Komentar