Beruflich Dokumente
Kultur Dokumente
2 7/26/2018
Multi Linked List – parent child relation
In form of :
– List inside a list
– Connection between 2 or more list
3 7/26/2018
Example : Student - Class
Let’s say we want to store student data and its
relation with the default class
What is the relation of the data?
– 1 to N relation
4 7/26/2018
Example : Student - Class
Type infotype_student < Type infotype_class <
id : string class_name : string
name : string supervisor : string
> >
5 7/26/2018
Example : Student - Class
Type list_student < Type list_class <
first : adr_student first : adr_class
> >
L1 : list_student
L2 : list_class
6 7/26/2018
Example : Student - Class
7 7/26/2018
Example : Student - Class
1-to-n relation
L1
A / B / C / D / /
L2
The simplest way is
X Y Z / to add a pointer to elm_class
in elm_student to show which
Class the student is enrolled
8 7/26/2018
Example : Student - Class
Type infotype_student < Type infotype_class <
id : string class_code : string
name : string class_name : string
> credit : integer
>
Type adr_student : pointer to
elm_student Type adr_class : pointer to
elm_class
Type elm_student <
info : infotype_student Type elm_class <
next : adr_student info : infotype_class
nextClass : adr_class next : adr_class
> >
9 7/26/2018
Operations
Insert Student and Insert Course
– No change
10 7/26/2018
Operations
Delete Student
– No change
Delete Relation
Delete Class
11 7/26/2018
Procedure Set Class
Procedure set_class(i/o: L1:list_student, i: L2 : list_class,
id : string, class : string)
Dictionary
P : adr_student
Q : adr_class
Algorithm
P search_student(L1, id)
Q search_class(L2, class)
if ( P ≠ Nil and Q ≠ Nil ) then
nextClass(P) Q
12 7/26/2018
Procedure Delete Class
Procedure del_class(i/o: L1:list_student, L2 : list_class, i: class : string)
Dictionary
P : adr_student
Q : adr_class
Algorithm
Q search_class(L2, class)
if ( Q ≠ Nil ) then
P first(L1)
while (P ≠ Nil) do
if ( nextClass(P) = Q ) then
nextClass(P) = Nil
P next(P)
deleteClass (L2, Q)
13 7/26/2018
Example : Student - Course
Let’s say we want to store student data and its
relation with the course taken
What is the relation of the data?
– N to M relation
14 7/26/2018
Example : Student - Course
Type infotype_student < Type infotype_course <
id : string course_id : string
name : string course_name : string
> credit : integer
>
15 7/26/2018
Example : Student - Course
Type list_student < Type list_course <
first : adr_student first : adr_course
> >
L1 : list_student
L2 : list_course
16 7/26/2018
Example : Student - Course
17 7/26/2018
Example : Student - Course
n-to-n relation
L1
A / B / C / D / /
X Y / X
Y / Z /
18 7/26/2018
Example : Student - Course
Type infotype_student < Type infotype_course <
id : string course_id : string
name : string course_name : string
> credit : integer
>
Type adr_student : pointer to
elm_student Type adr_course : pointer to
elm_course
Type elm_student <
info : infotype_student Type elm_course <
next : adr_student info : infotype_course
course : list_course next : adr_course
> >
19 7/26/2018
Operations
Insert Student and Insert Course
– No change
Dictionary
P : adr_student
Q, R : adr_course …
L3 : list_course if ( P ≠ Nil and Q ≠ Nil ) then
Algorithm Allocate(R)
P search_student(L1, id) info(R) info(Q) //duplicate Q
Q search_course(L2, id_course) L3 course(P)
… insertLastCourse(L3, R)
21 7/26/2018
Procedure Delete Course Student
Procedure del_course_student(i/o: L1:list_student,
i: id : string, course_id : string)
Dictionary
P : adr_student
L3 : list_course
Algorithm
P search_student(L1, id)
if ( P ≠ Nil ) then
L3 course(P)
deleteCourse(L3, course_id)
22 7/26/2018
Procedure Delete Student
Procedure del_student(i/o: L1:list_student, i: id : string)
Dictionary
P : adr_student
L3 : list_course
Algorithm
P search_student(L1, id)
if ( P ≠ Nil ) then
L3 course(P)
emptyList(L3)
deleteStudent(L1, info(P).id )
23 7/26/2018
Procedure Delete Course
Procedure del_course(i/o: L1:list_student,
i: L2:list_course, id_course : string)
Dictionary
P : adr_student
Q : adr_course
L3 : list_course
Algorithm
P first(L1)
while ( P ≠ Nil ) do
L3 course(P)
deleteCourse(L3, course_id)
P next(P)
deleteCourse(L2, course_id)
24 7/26/2018
Which one is the parent?
25 7/26/2018
Variation of Multi List
Depend on the case, List L2 might not be needed
– When child list is not too important to be listed
independently
– When the child list is too vary
– Example : List of Employee and list of their children
26 7/26/2018
Procedure add Course
Procedure add_course(i/o: L1:list_student, i: L2 : list_course,
id : string)
Dictionary
P : adr_student
…
R : adr_course
if ( P ≠ Nil ) then
L3 : list_course
Allocate(R)
Algorithm
input(info(R)) //input new data for child
P search_student(L1, id)
L3 course(P)
…
insertLastCourse(L3, R)
27 7/26/2018
Question?
Alternative Solution
With the duplication of the child node, the size
might expand became too big
Difficult modification at child node
Solution :
– Make the child list is a pointer element to point the second
list as a relation list
29 7/26/2018
Alternative : Student - Course
Type infotype_student < Type infotype_course <
id : string course_id : string
name : string course_name : string
> credit : integer
Type adr_student : pointer to elm_student >
Type adr_course : pointer to elm_course
Type elm_student <
info : infotype_student Type elm_course <
next : adr_student info : infotype_course
course : list_relation next : adr_course
> >
30 7/26/2018
Example : Student - Course
n-to-n relation
L1
A B / C D /
/ /
L2
X Y Z /
31 7/26/2018
Procedure add Course
Procedure add_course(i/o: L1:list_student, i: L2 : list_course,
id : string, course_id : string)
Dictionary
P : adr_student …
Q : adr_course if ( P ≠ Nil and Q ≠ Nil ) then
R : adr_relation Allocate(R)
L3 : list_course next_course(R) Q
Algorithm //create pointer to Q
P search_student(L1, id) L3 course(P)
Q search_course(L2, id_course) insertLastCourse(L3, R)
…
32 7/26/2018
Question?
P
Exercise 1
1 Info( P )
Info( child( P ) )
2 Info( child( next( P ) ) )
3 Info( next( child( first( L1 ) ) ) )
4 Info( next( P ) )
P next( P )
5 Child( P ) next( first( L2 ) )
Info( child( P ) )
6 create algorithm to count member of L1
34 7/26/2018
P
Exercise 2
35 7/26/2018
P
Exercise 3
36 7/26/2018
P
Q
Exercise 4
37 7/26/2018
Home Task
Modify your previous task into multilinked list with
m-n relation
– Create a child infotype that will suit the relation
38 7/26/2018
“special” Home Task
Let 2 linked lists that store computer data
(Computer name, IP Address) and user data
(username, password)
There is a restriction case where 1 user can only
login in 1 computer
– 1-to-1 relationship
39 7/26/2018
THANK YOU
7/26/2018
40