Contoh Code Double Linked List in C
Berikut merupakan contoh coding Double Linked List, yaitu aplikasi di supermarket. Aplikasi ini memiliki fungsi add item, edit item, delete item, view item, dan checkout.
Code bisa dilihat di bawah ini atau melalui file .cpp melalui link ini : https://drive.google.com/open?id=16IF9KQfsdpy098GK2osXbmAsgErl_AXu
Untuk materi review, bisa melalui link ini : https://data-structure-sheila.blogspot.com/2020/04/summary-review-1.html
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int total = 0;
char itemTemp [100];
int qtyTemp;
struct shop{
char item [100];
int qty;
struct shop *prev, *next;
}*head, *curr, *tail;
void view (){
int no = 0;
printf ("%5s %15s %15s\n","NO","ITEM","QTY");
printf ("========================================\n");
curr = tail;
while (curr!=NULL){
printf("%5d %15s %15d\n", ++no, curr->item, curr->qty);
curr = curr->prev;
}
printf ("========================================\n");
}
void pushAdd (char item[100], int qty){
struct shop *node = (struct shop*) malloc (sizeof(struct shop));
strcpy (node->item,item);
node->qty = qty;
if (head==NULL){
head = tail = node;
head->prev = NULL;
tail->next = NULL;
}
else if(strcmp (node->item, head->item) > 0){
node->next = head;
head->prev = node;
head = node;
head->prev = NULL;
}
else if (strcmp (node->item, tail->item) < 0){
tail->next = node;
node->prev = tail;
tail = node;
tail->next = NULL;
}
else{
curr = head;
while (strcmp (curr->item, node->item) >= 0){
curr = curr->next;
}
curr = curr->prev;
node->next = curr->next;
curr->next->prev = node;
curr->next = node;
node->prev = curr;
}
}
void add (){
system ("cls");
printf ("%40s\n","ADD ITEM");
printf ("========================================================================\n");
printf ("Item Name : ");
scanf ("%[^\n]", itemTemp); getchar();
printf ("Qty : ");
scanf ("%d", &qtyTemp); getchar();
total++;
pushAdd (itemTemp, qtyTemp);
printf ("========================================================================\n");
printf ("\nSuccessfully Added Item!\n");
printf ("\n===============================PRESS ENTER==============================\n");
getchar();
}
void pushEdit (char item [100], int qty){
struct shop* temp = head;
for (int i=0; i<total; i++){
if (strcmp (item, temp->item)==0){
temp->qty=qty;
break;
}
temp = temp->next;
}
}
void edit(){
system ("cls");
printf ("%40s\n","EDIT ITEM");
printf ("========================================================================\n");
struct shop* temp = head;
view ();
if (total == 0){
printf ("NO ITEM!\n");
printf ("\n===============================PRESS ENTER==============================\n");
getchar();
}
else{
printf ("Item Name : ");
scanf ("%[^\n]", itemTemp); getchar();
printf ("New Qty : ");
scanf ("%d", &qtyTemp); getchar();
pushEdit (itemTemp, qtyTemp);
printf ("========================================================================\n");
printf ("\nSuccessfully Edited Item!\n");
printf ("\n===============================PRESS ENTER==============================\n");
getchar();
}
}
void pop (char item[100]){
struct shop* temp = head;
int flag = 0;
for (int i=0; i<total; i++){
if (strcmp (item, temp->item) == 0){
flag = 1; break;
}
temp = temp->next;
}
if (flag != 1){
printf ("\nITEM NOT FOUND!\n");
printf ("Item Name : ");
scanf ("%[^\n]", itemTemp); getchar();
pop (itemTemp);
}
else if (flag == 1){
if (temp == head && head == tail){
head = tail = NULL;
free (temp);
}
else if (temp == head){
head = head->next;
free (head->prev);
head->prev = NULL;
}
else if (temp == tail){
tail = tail->prev;
free (tail->next);
tail->next = NULL;
}
else{
curr = head;
while (curr){
if (strcmp (item, temp->item) == 0){
curr->prev->next = curr->next;
curr->next->prev = curr->prev;
curr->prev = curr->next = NULL;
free (curr);
break;
}
curr = curr->next;
}
}
}
}
void deleteItem(){
system("cls");
printf ("%40s\n","DELETE ITEM");
printf ("========================================================================\n");
view ();
if (total == 0){
printf ("NO ITEM!\n");
printf ("\n===============================PRESS ENTER==============================\n");
getchar();
}
else{
printf ("Item Name : ");
scanf ("%[^\n]", itemTemp); getchar();
pop (itemTemp);
total--;
printf ("========================================================================\n");
printf ("\nSuccessfully Deleted Item!\n");
printf ("\n===============================PRESS ENTER==============================\n");
getchar();
}
}
void checkout(){
system("cls");
printf ("%40s\n","CHECKOUT");
printf ("========================================================================\n");
int no = 0;
printf ("%5s %15s %15s %15s %15s\n","NO","ITEM","QTY","PRICE","TOTAL");
printf ("========================================================================\n");
curr = tail;
int price = 5000, totalPrice = 0;
while (curr != NULL){
price = price * curr->qty;
printf ("%5d %15s %15d %15s %15d\n", ++no, curr->item, curr->qty, "5000", price);
totalPrice = totalPrice + price;
curr = curr->prev;
price = 5000;
}
printf ("\n========================================================================\nTOTAL PRICE = Rp %d,-\n", totalPrice);
printf ("\n!!KINDNESS IS FREE!!");
getchar();
exit (0);
}
int main (){
int mode = 0;
while (mode!=5){
system("cls");
printf ("%47s\n","WELCOME TO KIND SHOP");
printf ("========================================================================\n");
printf ("1. Add Item\n");
printf ("2. Edit Item\n");
printf ("3. Delete Item\n");
printf ("4. View My Item\n");
printf ("5. Checkout\n");
printf ("========================================================================\n");
printf ("-> ");
scanf ("%d", &mode); getchar();
switch (mode){
case 1 : add(); break;
case 2 : edit(); break;
case 3 : deleteItem(); break;
case 4 : system ("cls");
printf ("%40s\n","MY ITEM");
printf ("========================================================================\n");
if (total == 0){
printf ("NO ITEM!");
printf ("\n===============================PRESS ENTER==============================\n");
getchar();
}
else{
view();
printf ("\n===============================PRESS ENTER==============================\n");
getchar();
}
break;
case 5 : checkout(); break;
}
}
return 0;
}
Dibuat oleh : Sheila Gracia Angelina
NIM : 2301857456
Code bisa dilihat di bawah ini atau melalui file .cpp melalui link ini : https://drive.google.com/open?id=16IF9KQfsdpy098GK2osXbmAsgErl_AXu
Untuk materi review, bisa melalui link ini : https://data-structure-sheila.blogspot.com/2020/04/summary-review-1.html
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int total = 0;
char itemTemp [100];
int qtyTemp;
struct shop{
char item [100];
int qty;
struct shop *prev, *next;
}*head, *curr, *tail;
void view (){
int no = 0;
printf ("%5s %15s %15s\n","NO","ITEM","QTY");
printf ("========================================\n");
curr = tail;
while (curr!=NULL){
printf("%5d %15s %15d\n", ++no, curr->item, curr->qty);
curr = curr->prev;
}
printf ("========================================\n");
}
void pushAdd (char item[100], int qty){
struct shop *node = (struct shop*) malloc (sizeof(struct shop));
strcpy (node->item,item);
node->qty = qty;
if (head==NULL){
head = tail = node;
head->prev = NULL;
tail->next = NULL;
}
else if(strcmp (node->item, head->item) > 0){
node->next = head;
head->prev = node;
head = node;
head->prev = NULL;
}
else if (strcmp (node->item, tail->item) < 0){
tail->next = node;
node->prev = tail;
tail = node;
tail->next = NULL;
}
else{
curr = head;
while (strcmp (curr->item, node->item) >= 0){
curr = curr->next;
}
curr = curr->prev;
node->next = curr->next;
curr->next->prev = node;
curr->next = node;
node->prev = curr;
}
}
void add (){
system ("cls");
printf ("%40s\n","ADD ITEM");
printf ("========================================================================\n");
printf ("Item Name : ");
scanf ("%[^\n]", itemTemp); getchar();
printf ("Qty : ");
scanf ("%d", &qtyTemp); getchar();
total++;
pushAdd (itemTemp, qtyTemp);
printf ("========================================================================\n");
printf ("\nSuccessfully Added Item!\n");
printf ("\n===============================PRESS ENTER==============================\n");
getchar();
}
void pushEdit (char item [100], int qty){
struct shop* temp = head;
for (int i=0; i<total; i++){
if (strcmp (item, temp->item)==0){
temp->qty=qty;
break;
}
temp = temp->next;
}
}
void edit(){
system ("cls");
printf ("%40s\n","EDIT ITEM");
printf ("========================================================================\n");
struct shop* temp = head;
view ();
if (total == 0){
printf ("NO ITEM!\n");
printf ("\n===============================PRESS ENTER==============================\n");
getchar();
}
else{
printf ("Item Name : ");
scanf ("%[^\n]", itemTemp); getchar();
printf ("New Qty : ");
scanf ("%d", &qtyTemp); getchar();
pushEdit (itemTemp, qtyTemp);
printf ("========================================================================\n");
printf ("\nSuccessfully Edited Item!\n");
printf ("\n===============================PRESS ENTER==============================\n");
getchar();
}
}
void pop (char item[100]){
struct shop* temp = head;
int flag = 0;
for (int i=0; i<total; i++){
if (strcmp (item, temp->item) == 0){
flag = 1; break;
}
temp = temp->next;
}
if (flag != 1){
printf ("\nITEM NOT FOUND!\n");
printf ("Item Name : ");
scanf ("%[^\n]", itemTemp); getchar();
pop (itemTemp);
}
else if (flag == 1){
if (temp == head && head == tail){
head = tail = NULL;
free (temp);
}
else if (temp == head){
head = head->next;
free (head->prev);
head->prev = NULL;
}
else if (temp == tail){
tail = tail->prev;
free (tail->next);
tail->next = NULL;
}
else{
curr = head;
while (curr){
if (strcmp (item, temp->item) == 0){
curr->prev->next = curr->next;
curr->next->prev = curr->prev;
curr->prev = curr->next = NULL;
free (curr);
break;
}
curr = curr->next;
}
}
}
}
void deleteItem(){
system("cls");
printf ("%40s\n","DELETE ITEM");
printf ("========================================================================\n");
view ();
if (total == 0){
printf ("NO ITEM!\n");
printf ("\n===============================PRESS ENTER==============================\n");
getchar();
}
else{
printf ("Item Name : ");
scanf ("%[^\n]", itemTemp); getchar();
pop (itemTemp);
total--;
printf ("========================================================================\n");
printf ("\nSuccessfully Deleted Item!\n");
printf ("\n===============================PRESS ENTER==============================\n");
getchar();
}
}
void checkout(){
system("cls");
printf ("%40s\n","CHECKOUT");
printf ("========================================================================\n");
int no = 0;
printf ("%5s %15s %15s %15s %15s\n","NO","ITEM","QTY","PRICE","TOTAL");
printf ("========================================================================\n");
curr = tail;
int price = 5000, totalPrice = 0;
while (curr != NULL){
price = price * curr->qty;
printf ("%5d %15s %15d %15s %15d\n", ++no, curr->item, curr->qty, "5000", price);
totalPrice = totalPrice + price;
curr = curr->prev;
price = 5000;
}
printf ("\n========================================================================\nTOTAL PRICE = Rp %d,-\n", totalPrice);
printf ("\n!!KINDNESS IS FREE!!");
getchar();
exit (0);
}
int main (){
int mode = 0;
while (mode!=5){
system("cls");
printf ("%47s\n","WELCOME TO KIND SHOP");
printf ("========================================================================\n");
printf ("1. Add Item\n");
printf ("2. Edit Item\n");
printf ("3. Delete Item\n");
printf ("4. View My Item\n");
printf ("5. Checkout\n");
printf ("========================================================================\n");
printf ("-> ");
scanf ("%d", &mode); getchar();
switch (mode){
case 1 : add(); break;
case 2 : edit(); break;
case 3 : deleteItem(); break;
case 4 : system ("cls");
printf ("%40s\n","MY ITEM");
printf ("========================================================================\n");
if (total == 0){
printf ("NO ITEM!");
printf ("\n===============================PRESS ENTER==============================\n");
getchar();
}
else{
view();
printf ("\n===============================PRESS ENTER==============================\n");
getchar();
}
break;
case 5 : checkout(); break;
}
}
return 0;
}
Dibuat oleh : Sheila Gracia Angelina
NIM : 2301857456
Comments
Post a Comment