Review Data Struct (03/03/2020)

Pada hari ini (03/03/2020) saya mempelajari tentang 'Single Linked List' lebih lanjut lagi. Nah, pada single linked list terdapat saya belajar untuk menambahkan data dan menghapuskan data.

Untuk menambah data sendiri ada beberapa cara:
1. Push Head = dimana kita menambahkan data yang paling depan, sehingga head/kepala dari linked list kita akan berubah.
2. Push Tail = dimana kita menambahkan data yang paling belakang, sehingga tail/ekor dari linked list kita akan berubah.
3. Push Mid = dimana kita menambahkan data diantara data yang sudah ada. Jadi, nanti datanya bakal ditambahkan di tengah.
4. Push Index = nah, kalau ini kita ingin menambahkan data pada index yang kita inginkan.

Selain menambah, kita juga bisa menghapus dan sama seperti menambahkan data. Untuk menghapus data ada beberapa cara:
1. Pop Head = dimana data yang menjadi head sekarang akan dihapus, jadi nantinya data next dari head yang akan dihapus bakal jadi head yang baru.
2. Pop Tail = dimana data yang menjadi tail sekarang akan dihapus, jadi nantinya data sebelum dari tail yang akan dihapus bakal jadi tail yang baru.
3. Pop Mid = dimana data yang diantara data yang sudah ada yang akan dihapus. Sehingga kita akan menyambungkan data sebelum dari data yang dihapus dan data setelah data yang dihapus.

Berikut ini, kodingan untuk Single Linked List:

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

struct Data{
int angka;
char nama[106];
struct Data *next;
}*head, *tail, *data;

int counter; //untuk membantu kita dalam melakukan pushMid nantinya

void pushHead(int angka, char nama[]){
counter++;
struct Data *data = (struct Data*)malloc(sizeof(struct Data));
data->angka =  angka;
strcpy(data->nama, nama);
data->next = NULL;

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

void pushTail(int angka, char nama[]){
counter++;
struct Data *data = (struct Data*)malloc(sizeof(struct Data));
data->angka =  angka;
strcpy(data->nama, nama);
data->next = NULL;

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

void pushIdx(int angka, char nama[], int dest){
counter++;
struct Data *data = (struct Data*)malloc(sizeof(struct Data));
data->angka =  angka;
strcpy(data->nama, nama);

Data *temp = head;
int loop=1;
while(loop<dest){
temp = temp->next;
loop++;
}
data->next = temp->next;
temp->next = data;
}

void pushMid(int angka, char nama[]){
int idx = counter/2; //Nah, counter yang diatas tadi berfungsi untuk agar kita tahu yang mana index tengah dari data2.
struct Data *data = (struct Data*)malloc(sizeof(struct Data));
struct Data *curr = (struct Data*)malloc(sizeof(struct Data));
curr->angka =  angka;
strcpy(curr->nama, nama);

data= head;

while(idx!=0){
data = data->next;
idx--;
}
curr->next = data->next;
data->next = curr;
}

//Untuk melakukan popHead dan popTail, punya konsep yang sama yaitu kita harus memindahkan head/tail yang sudah ada terlebih dahulu ke head/tail yang baru. Nah, setelah itu barulah kita bisa menghapus si data dengan cara free.

void popHead(){
Data *temp = head;
head = temp->next;
free(temp);
}

void popTail(){
data = head;
while(data->next!=tail){
data = data->next;
}
free(tail);
tail = data;
tail->next = NULL;
}

void print(){
data = head;

while(data!=NULL){
printf("%d - %s\n", data->angka, data->nama);
data= data->next;
}
}

int main(){
pushHead(1233331, "Jajaja");
pushTail(1222221, "aliami");
pushTail(1222222, "aliamo");
pushTail(1222223, "aliame");
pushTail(1222224, "aliama");
// pushIdx(123456789, "asd", 1);
// pushMid(99981232, "hahaha");
// popHead();
popTail();
print();

return 0;
}

Nah, jadi sekiranya itulah yang saya pelajari pada pertemuan Data Struct hari ini. Terima Kasih.

Comments

Popular posts from this blog

Hashing Table dan Binary Tree

Proyek Akhir Mata Kuliah Computer Graphic LB01