pert ke 2 - Linked List Implementation I - 2101680123 - MILLIADY KUSNADI THE BU HIAP
Linked
List Implementation I
A.
Single Linked List
To
create a list, we first need to define a node structure for the list.
Supposed
we want to create a list of integers.
struct tnode {
int value;
struct
tnode *next;
};
struct tnode *head = 0;
B.
Single Linked List: Insert
To
insert a new value, first we should dynamically allocate a new node and assign
the value to it and then connect it with the existing linked list.
Supposed
we want to append the new node in front of the head.
struct tnode *node =
(struct
tnode*) malloc(sizeof(struct tnode));
node->value = x;
node->next =
head;
head = node;
C.
Single Linked List: Insert
Append a new node in front of head.
Assuming there is already a linked list
containing 10, 35, 27.
D.
Single Linked List: Insert
How
about the algorithm of inserting new node in the middle and in the last
of the single linked list?
Can you try it by yourself?
You should try!
E.
Single Linked List: Delete
To delete a value,
first we should find the location of
node
which store the value we want to delete, remove it,
and
connect the remaining linked list.
Supposed the value we want to remove is x and
assuming x is exist in linked list and it is unique.
There are two conditions we should pay attention to:
if x is in a head node or x is not in a
head node.
F.
Single Linked List: Delete
struct tnode *curr
= head;
// if x is in head node
if ( head->value == x ) {
head =
head->next;
free(curr);
}
}
// if x is in tail node
else
if(tail->value == x){
while(curr->next!=tail) curr = curr->next;
free(tail); tail = curr;
tail->next = NULL;
}
// if x is not in head node, find the location
else {
while (
curr->next->value != x ) curr = curr->next;
struct tnode
*del = curr->next;
curr->next =
del->next;
free(del);
}
G. Polynomial
Representation
•
Polynomial is given as 6x3 +
9x2 + 1
•
Every individual term in a polynomial
consists of two parts, a coefficient and a power
•
Here, 6, 9, 7, and 1 are the
coefficients of the terms that have 3, 2, 1, and 0 as their power respectively.
•
Every term of a polynomial can be
represented as a node of the linked list.
H. Circular
Single Linked List
•
In circular, last node contains a
pointer to the first node
•
We can have a circular singly linked
list as well as a circular doubly linked list.
•
There is no storing of NULL values in
the list
I.
Doubly Linked List
Doubly linked list or
two-way linked list is a linked list data
structure with two link, one that contain reference
to the next data
and one that contain reference to the previous data.
struct tnode {
int value;
struct tnode *next;
struct tnode *prev;
};
struct tnode *head
= 0;
struct tnode *tail
= 0;
J.
Doubly Linked List: Delete
There are 4 conditions we should pay attention when
deleting:
•
The node to be deleted is the only node
in linked list.
•
The node to be deleted is head.
•
The node to be deleted is tail.
•
The node to be deleted is not head or
tail.
1. If the
node to be deleted is the only node:
–
free(head);
–
head = NULL;
–
tail = NULL;
2.
If the node to be deleted is head:
•
head = head->next;
•
free(head->prev);
•
head->prev = NULL;
3.
If
the node to be deleted is tail:
•
tail = tail->prev;
•
free(tail->next);
•
tail->next = NULL;
•
If the node to be deleted is not in head
or tail:
struct tnode *curr = head;
while ( curr->next->value != x )
curr = curr->next;
struct tnode *a = curr;
struct tnode *del = curr->next;
struct tnode *b = curr->next->next;
a->next = b;
b->prev = a;
free(del);
Komentar
Posting Komentar