Seputar IT dan Kajian Islam

Senin, 08 Juni 2020

SINGLE LINKED LIST


MEMBUAT SINGLE LINKED LIST

1. Berikut ini merupakan source codenya :

#include
#include

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

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


int main(void) {
 int num = 0;
 int input = 5;
 int retval = 0;
 struct NODE *llist;

 llist = (struct NODE *)malloc(sizeof(struct NODE));
 llist->number = 0;
 llist->next = NULL;
 while(input != 0) {
  printf("\n===== Pilih Menu =====\n");
  printf("0: Keluar\n");
  printf("1: Insert\n");
  printf("2: Search\n");
  printf("3: Tampilkan\n");
  printf("\nPilihan: ");scanf("%d", &input);

if(input==0){
    printf("...Terimakasih...\n");
}
else if(input==1){
    printf("Anda Memilih: 'Insert'\n");
    printf("Masukkan Nilai Yang Akan di Insert: ");
    scanf("%d", &num);
    append_node(llist, num);
}
else if(input==2){
    printf("Anda Memilih: 'Search'\n");
    printf("Masukkan Nilai Yang Akan di Cari (Search): ");
    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);
}
else if(input==3){
    printf("Anda Memilih: 'Tampilkan'\n");
    display_list(llist);
}}

 free(llist);
 return(0);
}

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;
}

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;
}

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

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

}

OUTPUT :





2. SOURCE CODE untuk single linked list yg fungsi nya dapat menghapus data

#include
#include
#include

struct human{
int age;
char name[30];
human *next;
}*head, *tail, *current;

void pushTail(int age, char name[]){
current = (human*)malloc(sizeof(struct human));
current->age = age;
strcpy(current->name, name);

if(head == NULL){
head = tail = current;
}
else{
tail->next = current;
tail = current;
}
tail->next = NULL;
}

void pushHead(int age, char name[]){
current = (human*)malloc(sizeof(struct human));
current->age = age;
strcpy(current->name, name);

if(head == NULL){
head = tail = current;
}
else{
current->next = head;
head = current;
}
}

void pushMid(int age, char name[]){
current = (human*)malloc(sizeof(struct human));
current->age = age;
strcpy(current->name, name);

if(head == NULL){
head = tail = current;
}
else if(current->age < head->age){
pushHead(age, name);
}
else if(current->age > tail->age){
pushTail(age, name);
}
else{
human *temp = head;
while(temp->next->age < current->age){
temp = temp->next;
}
current->next = temp->next;
temp->next = current;
}
}

void popHead(){
current=head;
if(head==NULL){
printf("No data");
}else if(head==tail){
head=tail=NULL;
free(current);
}else{
head=head->next;
free(current);
}
}

void popTail(){
if(head==NULL){
printf("No data");
}else if(head==tail){
head=tail=NULL;
free(current);
}else{
human *temp=head;
while(temp->next!=tail){
temp=temp->next;
}
current=tail;
tail=temp;
free(current);
tail->next=NULL;
}
}

void popMid(int age){
current=head;
if(head==NULL){
printf("No data");
}else if(head->age==age){
popHead();
}else if(tail->age==age){
popTail();
}else{
human *temp=head;
while(temp->next->age!=age && temp!=tail){
temp=temp->next;
}
current=temp->next;
temp->next=temp->next->next;
free(current);
}
}

void popAll(){
while(head!=NULL){
popHead();
}
}

void print(){
current = head;
while(current != NULL){
printf("%s - %d\n",current->name,current->age);
current = current->next;
}
}

int main(){
pushMid(18, "hery");
pushMid(17, "mahirkoding");
pushTail(22, "andi");
pushHead(15, "tono");
pushMid(11, "vandoro");
pushMid(23, "budi");
popHead();
popTail();
popMid(15);
//popAll();
print();
getchar();
return 0;
}

0 komentar:

Posting Komentar