Jadi Untuk kali ini saya belajar Tentang Single Linked List dan Double Linked List
Bedanya Single dan Double Linked List adalah :
Single Linked List hanya mempunyai Next sedangkan Double Linked List mempunyai Next dan prev untuk mengubah node node di dalam linked List
Linked List dapat digunakan untuk proteksi data seperti membuat suatu langkah mendapatkan node dengan memanfaatkan next dan prev
Linked List akan terpakai karena dapat menginput data secara Dynamic menggunakan Memory Allocation / Malloc dengan return type void pointer
Malloc akan selalu di TypeCasting ke Struct agar tidak mereturn void pointer.
Berikut adalah Contoh dari Double Linked List
#include <stdio.h>
#include <stdlib.h>
struct node{
int data;
node *next;
node *prev;
}*head,*tail;
node *newnode(int data){
node *curr = (node *)malloc(sizeof(node));
curr->data = data;
curr->next = curr->prev = NULL;
return curr;
}
void view(){
node *ptr = head;
while(ptr != NULL){
printf("%d ",ptr->data);
ptr = ptr->next;
}
}
void pushHead(node *data){
if(head == NULL){
head = tail = data;
}
else{
head->prev = data;
data->next = head;
head = data;
}
head->prev = NULL;
}
void pushTail(node *data){
if(head == NULL){
head = tail = data;
}
else{
tail->next = data;
data->prev = tail;
tail = data;
}
tail->next = NULL;
}
void pushMid(node *data){
if(head == NULL){
head = tail = data;
}
else{
if(data->data<head->data){
pushHead(data);
}
else if(data->data >tail->data){
pushTail(data);
}
else{
node *ptr = head;
while(ptr->next->data<data->data){
ptr = ptr->next;
}
data->next = ptr->next;
ptr->next->prev = data;
data->prev = ptr;
ptr->next = data;
}
}
}
void popHead(){
node *temp = head;
head = head->next;
temp->next = NULL;
free(temp);
}
void popTail(){
node *temp = tail;
tail = tail->prev;
temp->prev = NULL;
tail->next = NULL;
free(temp);
}
popMid(int data){
node *temp = head;
if(head == tail){
}
else{
while(temp){
if(temp->data == data)break;
temp = temp->next;
}
temp->prev->next = temp->next;
temp->next->prev = temp->prev;
temp->next = NULL;
temp->prev = NULL;
free(temp);
}
}
void popAll(){
while(head != NULL){
popHead();
}
}
int main(int agrs,char **argv){
// pushTail(newnode(15));
// pushTail(newnode(7));
// pushTail(newnode(5));
// pushTail(newnode(25));
// pushTail(newnode(3));
// pushHead(newnode(1));
// pushHead(newnode(2));
// pushHead(newnode(3));
// pushHead(newnode(4));
pushMid(newnode(1));
pushMid(newnode(3));
pushMid(newnode(2));
pushMid(newnode(4));
pushMid(newnode(5));
// popHead();
// popTail();
popAll();
view();
return 0;
}
Bedanya Single dan Double Linked List adalah :
Single Linked List hanya mempunyai Next sedangkan Double Linked List mempunyai Next dan prev untuk mengubah node node di dalam linked List
Linked List dapat digunakan untuk proteksi data seperti membuat suatu langkah mendapatkan node dengan memanfaatkan next dan prev
Linked List akan terpakai karena dapat menginput data secara Dynamic menggunakan Memory Allocation / Malloc dengan return type void pointer
Malloc akan selalu di TypeCasting ke Struct agar tidak mereturn void pointer.
Berikut adalah Contoh dari Double Linked List
#include <stdio.h>
#include <stdlib.h>
struct node{
int data;
node *next;
node *prev;
}*head,*tail;
node *newnode(int data){
node *curr = (node *)malloc(sizeof(node));
curr->data = data;
curr->next = curr->prev = NULL;
return curr;
}
void view(){
node *ptr = head;
while(ptr != NULL){
printf("%d ",ptr->data);
ptr = ptr->next;
}
}
void pushHead(node *data){
if(head == NULL){
head = tail = data;
}
else{
head->prev = data;
data->next = head;
head = data;
}
head->prev = NULL;
}
void pushTail(node *data){
if(head == NULL){
head = tail = data;
}
else{
tail->next = data;
data->prev = tail;
tail = data;
}
tail->next = NULL;
}
void pushMid(node *data){
if(head == NULL){
head = tail = data;
}
else{
if(data->data<head->data){
pushHead(data);
}
else if(data->data >tail->data){
pushTail(data);
}
else{
node *ptr = head;
while(ptr->next->data<data->data){
ptr = ptr->next;
}
data->next = ptr->next;
ptr->next->prev = data;
data->prev = ptr;
ptr->next = data;
}
}
}
void popHead(){
node *temp = head;
head = head->next;
temp->next = NULL;
free(temp);
}
void popTail(){
node *temp = tail;
tail = tail->prev;
temp->prev = NULL;
tail->next = NULL;
free(temp);
}
popMid(int data){
node *temp = head;
if(head == tail){
}
else{
while(temp){
if(temp->data == data)break;
temp = temp->next;
}
temp->prev->next = temp->next;
temp->next->prev = temp->prev;
temp->next = NULL;
temp->prev = NULL;
free(temp);
}
}
void popAll(){
while(head != NULL){
popHead();
}
}
int main(int agrs,char **argv){
// pushTail(newnode(15));
// pushTail(newnode(7));
// pushTail(newnode(5));
// pushTail(newnode(25));
// pushTail(newnode(3));
// pushHead(newnode(1));
// pushHead(newnode(2));
// pushHead(newnode(3));
// pushHead(newnode(4));
pushMid(newnode(1));
pushMid(newnode(3));
pushMid(newnode(2));
pushMid(newnode(4));
pushMid(newnode(5));
// popHead();
// popTail();
popAll();
view();
return 0;
}
Komentar
Posting Komentar