03 Linked List
03 Linked List
03 Linked List
Data Structure:
List
List L 34 12 52 16 12
34 12 52 16 12
insert X
34 12 52 X 16 12
L i st ADT: simple implementaGon with array
it is inefficient because . . .
an esGmate of the maximum size of the list is required
it requires overesGmaGng the amount of storage needed for the list
it is hard to insert or delete at the beginning or in the middle of the list
worst case: O(N)
average case: half of the list O(N)
building a list by N successive inserts: O(N2)
L i st ADT: simple implementaGon with array
it is inefficient because . . .
an esGmate of the maximum size of the list is required
it requires overesGmaGng the amount of storage needed for the list
it is hard to insert or delete at the beginning or in the middle of the list
worst case: O(N)
average case: half of the list O(N)
building a list by N successive inserts: O(N2)
L i st ADT: linked list
A1 A2 A3 A4 A5
L i st ADT: linked list
A1 A2 A3 A4 A5
L i st ADT: linked list
A1
1000
A1 0
L i st ADT: linked list
A1 A2
1000 800
A1 800 A2 0
L i st ADT: linked list
A1 A2 A3
A1 A2 A3 A4
A1 A2 A3 A4 A5
A1 A2 A3 A4 A5
first 10 20
L i st ADT: example
second
typedef struct Node* PtrToNode;
first 10 20
typedef struct Node {
int data;
PtrToNode link;
};
PtrToNode create2() {
PtrToNode first, second;
MALLOC(first, sizeof(*first));
MALLOC(second, sizeof(*second));
second->link = NULL;
second->data = 20;
first->data = 10;
first->link = second;
return first;
}
L i s t A D T: insertion
A1 A2 A3 A4 A5
L i st ADT: inserGon
34
A1 A2 A3 A4 A5
L
34
L i st ADT: inserGon
34
A1 A2 A3 A4 A5
L
34 p
Insert(X, L, P)
A1 A2 A3 A4 A5
L p
Insert(X, L, P)
A1 A2 A3 A4 A5
p
L
X
L i st ADT: deleGon
A1 A2 A3 A4 A5
p
L
Delete(A3, L)
A1 A2 A3 A4 A5
p
L
A1 A2 A3 A4 A5
A1 A2 A4 A5
L
l i st ADT: typ e d ecl arati o n fo r a l i n ked l i st
struct Node {
ElementType element;
Position next;
};
List MakeEmptyList();
int IsEmpty(List list);
int IsLast(Position p, List list);
List MakeEmptyList() {
struct Node {
List list;
ElementType element;
list = (List) malloc(sizeof(struct Node));
Position next;
list->element = header;
};
list->next = NULL;
return list;
}
header
list
l i st ADT: Is E mpty
header true
list
false
header 6
list
l i st ADT: Is E mpty
header true
false
header
L
l i st ADT: Is L ast
header true
list p
header false
list p
l i st ADT: Is L ast
header true
list p
header false
list p
l i st ADT: F i n d
header A1 X A2 A3
list
l i st ADT: F i n d
header A1 X A2 A3
list p
l i st ADT: F i n d
header A1 X A2 A3
list p
l i st ADT: F i n d
header A1 X A2 A3
list p
l i st ADT: F i n d
header A1 X A2 A3
list p
header A1 A2
list p
l i st ADT: F i n d Previ o u s
header
list
header A1 A2 X A3
list
P
l i st ADT: F i n d Previ o u s
header
list
header A1 A2 X A3
list
P
l i st ADT: F i n d Previ o u s
header
list
header A1 A2 X A3
list P
l i st ADT: F i n d Previ o u s
header
list
header A1 A2 X A3
list P
L i st ADT: I n s ert
struct Node {
ElementType element;
Position next;
};
A1 A2 A3 A4 A5
list P
L i s t A D T: I n s e r t
A1 A2 A3 A4 A5
list P
X
tmp
L i s t A D T: I n s e r t
A1 A2 A3 A4 A5
list P
X
tmp
L i s t A D T: I n s e r t
A1 A2 A3 A4 A5
list P
X
tmp
l i st ADT: D el ete
struct Node {
ElementType element;
Position next;
};
header A1 A2 X A3
list
l i st ADT: D el ete
p = FindPrevious(x, list);
struct Node {
ElementType element;
Position next;
};
header A1 A2 X A3
list P
l i st ADT: D el ete
p = FindPrevious(x, list);
if (!IsLast(p, list)) { /* X is found; delete it */
p->next = ???; /* Bypass deleted cell */
}
}
header A1 A2 X A3
list P
l i s t A D T: D e l e t e
p = FindPrevious(x, list);
if (!IsLast(p, list)) { /* X is found; delete it */
tmp = p->next;
p->next = tmp->next; /* Bypass deleted cell */
free(tmp);
}
}
header A1 A2 X A3
list P
tmp
l i st ADT: D el eteL i st
header A1 A2 X A3
list
l i st ADT: D el eteL i st
header A1 A2 X A3
list
l i st ADT: D el eteL i st
p = list->next; p = list->next;
list->next = NULL; list->next = NULL;
while (p != NULL) { while (p != NULL) {
free(p); tmp = p->next;
p = p->next; free(p);
} p = tmp;
} }
}
header A1 A2 X A3
list
D o u b l y L i n ked L i st
struct Node {
ElementType element;
Position next;
Position prev;
};
list
D o u b l y L i n ked L i st : i n s ert
D o u b l y L i n ked L i st : i n s ert
P
x
tmp
}
D o u b l y L i n ked L i st : i n s ert
P
x
tmp
P x
tmp
P
x
p
D o u b l y L i n ked L i st : d el ete
Header?