Single Linked list

Single Linked List
Single Linked List merupakan suatu linked list yang hanya memiliki satu variabel pointer saja. Dimana pointer tersebut menunjuk ke node selanjutnya. Biasanya field pada tail menunjuk ke NULL.

Head adalah elemen yang berada pada posisi pertama dalam suatu linked list atau kepala
Tail adalah elemen yang berada pada posisi terakhir dalam suatu linked list atau ekor

Contoh koding:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

// tipe local

struct Data
{
char name[51];
int score;
struct Data *next, *prev;
};//*head=NULL, *tail=NULL, *curr;

struct Data* newNode (char name[], int score){
// 1. Reserve Memory
struct Data *node = (struct Data*) malloc(sizeof(struct Data));

// 2. Assign Value
strcpy(node->name, name);
(*node).score = score;
node->next = NULL;
}


void pushHead(struct Data **head, struct Data **tail, char name[], int score)
{

struct Data *node = newNode(name, score);


if (head == NULL) // list masih kosong
{
*head = *tail = node;
}
else
{
node->next = *head;
*head = node;
}

}

void pushTail(struct Data **head, struct Data **tail, char name[], int score)
{



struct Data *node = newNode(name, score);


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

}

void pushMiddle(struct Data **head, struct Data **tail, char name[], int score)
{

struct Data *node = newNode(name, score);


if(*head == NULL)
*head = *tail = node;

else if (score < (*head)->score)
{
//pushHead
node->next = *head;
*head = node;
}
else if (score >= (*tail)->score)
{
//pushTail
(*tail)->next = node;
*tail = node;
}
else
{
struct Data *curr = *head;
while(score >= curr->next->score)
{
curr = curr->next;
}
node->next = curr->next;
curr->next = node;
}
}

void popHead(struct Data **head, struct Data **tail)
{
if (*head == NULL)
printf ("No Data to Delete!\n");
else if (*head == *tail)
{
free(*head);
*head = *tail = NULL;
}
else
{
struct Data *curr = *head;
*head = (*head)->next;
free(curr);
}
}

void popTail (struct Data **head, struct Data **tail)
{
if (*head == NULL)
printf ("No Data to Delete!\n");
else if (*head == *tail)
{
free(*head);
*head = *tail = NULL;
}
else
{
struct Data *curr = *head;
while(curr->next != *tail)
{
curr = curr->next;
}
free(*tail);
*tail = curr;
(*tail)->next = NULL;
}
}

void popAll(struct Data **head, struct Data **tail)
{
if (*head == NULL)
printf("No Data to Delete!\n");
else
{
struct Data *curr = *head;
while (curr != NULL)
{
*head = (*head)->next;
free(curr);
curr = *head;
}
}
}


void cetak(struct Data *head)
{
if(head == NULL)
printf("No Data!\n");
else
{
struct Data *curr = head;
while(curr != NULL)
{
printf("%s %d\n", curr->name, curr->score);
curr = curr->next;
}
}
}

int main ()
{
struct Data *head=NULL;
struct Data *tail=NULL;

cetak(head);

pushHead(&head, &tail, "Agus Budiman", 22);
pushTail(&head, &tail, "Adel Wijaya", 22);
pushMiddle(&head, &tail, "Harris Setiawan", 53);
pushMiddle(&head, &tail, "Dinda Agustina", 45);
pushMiddle(&head, &tail, "Marie Ayunda", 37);
cetak(head);

popHead(&head, &tail);
popAll(&head, &tail);
cetak(head);

return 0;
}

Komentar

Postingan populer dari blog ini

Review

Hashing and Binary Tree

Energi Matahari dan Energi Angin