Wednesday 17 April 2013

Program Linked List ( Bahasa C)


Contoh Penerapan Linked List Dalam Bahasa C sedikit lebih Rumit daripada PASCAL. Pelajari pelan2 saja...

#include <stdio.h>
#include <stdlib.h>

struct NODE {
 int number;
 struct NODE *next;
};

int  search_value(struct NODE *llist, int num);
void append_node(struct NODE *llist, int num);
void display_list(struct NODE *llist);
void delete_node(struct NODE *llist, int num);

int main(void) {
 int num = 0;
 int input = 1;
 int retval = 0;
 struct NODE *llist;
 
 llist = (struct NODE *)malloc(sizeof(struct NODE));
 llist->number = 0;
 llist->next = NULL;
 
 while(input != 0) {
  printf("\n-- Menu Selection --\n");
  printf("0) Quit\n");
  printf("1) Insert\n");
  printf("2) Delete\n");
  printf("3) Search\n");
  printf("4) Display\n");
  scanf("%d", &input);

  switch(input) {
   case 0:
   default:
    printf("Goodbye ...\n");
    input = 0;
    break;
   case 1:
    printf("Your choice: `Insertion'\n");
    printf("Enter the value which should be inserted: ");
    scanf("%d", &num);
    append_node(llist, num);
    break;
   case 2:
    printf("Your choice: `Deletion'\n");
    printf("Enter the value which should be deleted: ");
    scanf("%d", &num);
    delete_node(llist, num);
    break;
   case 3:
    printf("Your choice: `Search'\n");
    printf("Enter the value you want to find: ");
    scanf("%d", &num);
    if((retval = search_value(llist, num)) == -1)
     printf("Value `%d' not found\n", num);
    else
     printf("Value `%d' located at position `%d'\n", num, retval);
    break;
   case 4:
    printf("You choice: `Display'\n");
    display_list(llist);
    break;
   } /* switch */
  } /* while */

 free(llist);
 return(0);
}

void display_list(struct NODE *llist) {
 while(llist->next != NULL) {
  printf("%d ", llist->number);
  llist = llist->next;
 }

 printf("%d", llist->number);
}

void append_node(struct NODE *llist, int num) {
 while(llist->next != NULL)
  llist = llist->next;

 llist->next = (struct NODE *)malloc(sizeof(struct NODE));
 llist->next->number = num;
 llist->next->next = NULL;
}

void delete_node(struct NODE *llist, int num) {
 struct NODE *temp;
 temp = (struct NODE *)malloc(sizeof(struct NODE));

 if(llist->number == num) {
  temp = llist->next;
  free(llist);
  llist = temp;
 } else {
  while(llist->next->number != num)
   llist = llist->next;

  temp = llist->next->next;
  free(llist->next);
  llist->next = temp;
 }  
}

int search_value(struct NODE *llist, int num) {
 int retval = -1;
 int i = 1;

 while(llist->next != NULL) {
  if(llist->next->number == num)
   return i;
  else
   i++;

  llist = llist->next;
 }

 return retval;
}

Tampilan nya:

6 comments:

  1. Replies
    1. sama-sama.. Btw, program apa n bhsa pemrograman apa sih yang biasanya dijadikan tugas ?

      Delete
  2. kebanyakan c, skrng lg mempelajari linked list

    ReplyDelete
  3. ap bedanya sama double linked list?

    ReplyDelete
  4. artikelnya bermanfaat kak, ini sya jga punya artikel tentang Linked List Dalam Bahasa C, smoga dpt saling melengkapi

    Linked List Dalam Bahasa C

    Kumpulan Materi Bahasa C, Lengkap dengan contoh program

    ReplyDelete
  5. ini linked list atau Stack ya..?.. Maklum Masih Belajar

    ReplyDelete