Double Linked List – Tm 02

#include
#include
struct data {
int x;
data *next, *prev;
}*head, *tail, *curr;

void push_front(int x) {
data *add=(struct data*)malloc(sizeof(struct data));
add->x=x;
add->next=add->prev=NULL;
if(head==NULL) {
head=tail=add;
}
else {
add->next=head;
head->prev=add;
head=add;
}
}
void push_back(int x) {
data *add=(struct data*)malloc(sizeof(struct data));
add->x=x;
add->next=add->prev=NULL;
if(head==NULL) {
head=tail=add;
}
else {
add->prev=tail;
tail->next=add;
tail=add;
}
}
void push_middle(int x, int y) {
data *add=(struct data*)malloc(sizeof(struct data));
add->x=x;
add->next=add->prev=NULL;
if(head==NULL) {
head=tail=add;
}
else {
if(head->x==y) {
add->next=head->next;
add->prev=head;
if(head==tail) {
push_back(x);
}
else {
head->next->prev=add;
head->next=add;
}
}
else if(tail->x==y) {
push_back(x);
}
else {
curr=head;
while(curr->next!=tail) {
if(curr->x==x) break;
curr=curr->next;
}
if(curr!=tail&&curr->x==y) {
add->next=curr->next;
add->prev=curr;
curr->next->prev=add;
curr->next=add;
}
}
}
}
void view() {
curr=head;
while(curr!=NULL) {
printf(curr->next==NULL?”%d”:”%d->”, curr->x);
curr=curr->next;
}
getchar();
}
int main() {
printf(“Masukkan angka 1 dan 3\n”);
push_front(1);
push_back(3);
view();
printf(“Masukkan angka 2 di antara 1 dan 3\n”);
push_middle(2, 1);
view();
printf(“Masukkan data 0 di depan list angka\n”);
push_front(0);
view();
printf(“Masukkan data 5 di paling akhir list angka\n”);
push_back(5);
view();
return 0;
}

This entry was posted in Uncategorized. Bookmark the permalink.

Leave a Reply

Your email address will not be published. Required fields are marked *