// Linked List

#include  <stdio.h>
#include  <stdlib.h>

struct CELL {
  struct CELL *next;
  int         value;
};

typedef struct CELL cell;  // selanjutnya deklarasi sel cukup dengan "cell", tidak perlu menulis lengkap  "struct CELL"

cell header;

/*
	Nama fungsi:	fatal_error
	Fungsi:		menampilkan error message, kemudian exit
	Input:		error message
*/

void	fatal_error(char *s)
{

	fprintf(stderr,s);
	exit(1);
}

/* 
	Nama fungsi:	cell_insert
	Fungsi:		menambahkan sel baru ke linked list
	Input:		value (nilai) sel yang ingin dimasukkan
*/

void cell_insert(int a)
{
  cell *p, *q, *new_cell;

  p=header.next;
  q=&header;

  while((p!=NULL)&&(p->value <a )) {
    q=p;
    p=p->next;
  }
  if((new_cell=(cell*)malloc(sizeof(cell)))==NULL) fatal_error("memory tidak cukup");
  new_cell->next   = p;
  q->next          = new_cell;
  new_cell->value  = a;

}

/* 
	Nama fungsi:	cell_delete
	Fungsi:		menghapus sebuah sel yang memiliki nilai tertentu
	Input:		value (nilai) sel yang ingin dihapus
*/


void  cell_delete(int a)
{
  cell *p, *q;

  p=header.next;
  q=&header;

// selesaikan bagian ini

}

/* 
  	Nama fungsi:	print_list
	Fungsi:		menampilkan value semua sel pada sebuah list 
	Input:		tidak ada
*/


void print_list()
{
  cell *p;

  printf("\n");
  printf("\t\tAddress\t\tvalue\n\t\t------------------------\n");
  for(p=header.next;p!=NULL;p=p->next)    printf("\t\t%p\t%d\n",p,p->value);
  printf("\n");
}

/* 
	Main function
*/


main()
{

  int    mode,value;  

  printf("*****************************\n\t LINKED LIST \n*****************************\n");
  printf("Pilihlah operasi yang ingin dilakukan:   1.memasukkan sel baru  2.menghapus sel   3.selesai\t");
  while(scanf("%d",&mode)){
    switch(mode){
    case 1:  printf("Operasi yang dipilih:  memasukkan sel baru");
             printf("Value sel yang ingin dimasukkan ? \t");
             scanf("%d",&value);
	     cell_insert(value);
             break;
    case 2:  printf("Operasi yang dipilih: menghapus sel\n");
             printf("Value sel yang ingin dihapus\t");
             scanf("%d",&value);
	     cell_delete(value);
             break;
    case 3:  exit(0);
    default: break;
    }
    print_list();
  printf("Pilihlah operasi yang ingin dilakukan:   1.memasukkan sel baru  2.menghapus sel   3.selesai\t");
  }
}


