Linked List
Linked List
Linked List
2
Linked Lists
3
Representation of Link List in Memory
BED Patient
Next
Number
7
1 Kirk
2
11
3 Daen
12
4 Maxwell
5 3
5 Adams
6
Start 4
7 Lane
1
8 Green
0
9 Samules
10
8
11 Fields
9
12 Nelson 4
Traversing a Linked List
Algorithm:
6
List is Unsorted
Algorithm: Search(INFO, START, ITEM, LOC)
1. Set PTR:=START.
2. Repeat steps 3 while PTR!=NULL.
3. If ITEM= INFO[PTR], then
Set LOC:=PTR, and Exit.
Else
Set PTR:= LINK[PTR]. [PTR now points to next node.]
[End of if structure]
[End of step 2 loop]
4. [Search is unsuccessful] Set LOC:=NULL.
5. Exit.
Where
LIST is a linked list in memory
LOC is the location of the node where ITEM first appears in the LIST
7
List is sorted
Algorithm: Search(INFO, START, ITEM, LOC)
1. Set PTR:=START.
2. Repeat step 3 while PTR!=NULL:
3. If ITEM< INFO[PTR], then
Set PTR=LINK[PTR]. [PTR now points to next node.]
Else if ITEM= INFO[PTR] then :
Set LOC:=PTR and Exit. [Search is successful.]
Else
Set LOC:=NULL, and Exit. [ITEM now exceeds INFO[PTR]
[End of if structure]
[End of step 2 loop]
4. Set Loc:=NULL.
5. Exit.
Where
LIST is a linked list in memory
LOC is the location of the node where ITEM
8 first appears in the LIST
Garbage Collection
• The operating system of a computer may periodically collect
all the deleted space onto the free storage list. Any technique
which does this collection is called garbage collection.
• Garbage collection usually takes place in two steps
A. First the computer runs through all lists tagging those cells
which are currently in use
B. Then computer runs through memory,collecting all the
untagged space onto the free storage list.
INSFIRST(INFO,LINK,STASRT,AVAIL,ITEM)
This algorithm inserts ITEM as the first node in the list.
1.[OVERFLOW?]If AVAIL= NULL, then :write OVERFLOW, and exit.
2.[remove first node from AVAIL list]
Set NEW:=AVAIL and AVAIL:=LINK[AVAIL]
3.Set INFO[NEW]:=ITEM [copies new data into new node]
4.Set LINK[NEW]:=START [new node now points to the original first node]
5.Set START:=NEW [change START so it points to the new node]
6.Exit
Insertion after a given node
ALGORITHM 5
INSLOC(INFO,LINK,START,AVAIL,LOC,ITEM)
This algorithm inserts ITEM so that ITEM follow the node with location LOC
or inserts ITEM as the first node when LOC=NULL
1. [OVERFLOW?]If AVAIL= NULL, then :write OVERFLOW, and exit.
2. [remove first node from AVAIL list]
Set NEW:=AVAIL and AVAIL:=LINK[AVAIL]
3. Set INFO[NEW]:=ITEM [copies new data into new node]
4. If LOC=NULL, then: [insert as first node]
set LINK[NEW]:=START and START:=NEW
Else:[insert after node with location LOC]
set LINK[NEW]:=LINK[LOC] and LINK[LOC]:=NEW
[End of if structure]
5. Exit
Insertion into a sorted list
• Suppose ITEM is to be inserted into a sorted linked LIST. Then
ITEM must be inserted between nodes A and B so that
INFO(A)<ITEM<=INFO(B)
Traverse the list, using a pointer variable PTR and comparing
ITEM with INFO[PTR] at each node. While traversing keep
track of the location of the preceding node by using a pointer
variable SAVE. Thus SAVE and PTR are updated by the
assignments
SAVE:=PTR and PTR:=LINK[PTR]
Insertion into a sorted list
PROCEDURE 1
FINDA(INFO,LINK,START,ITEM,LOC)
This procedure finds the location LOC of the last node in a sorted list such
that INFO[LOC]<ITEM, or sets LOC=NULL
1.[list empty?] if START= NULL,then:set LOC:=NULL, and return
2.[special case?] if ITEM<INFO[START],then: set LOC:=NULL, and return
3.Set SAVE:=START and PTR:=LINK[START] [initialize pointers]
4.Repeat steps 5 and 6 while PTR≠ NULL
5.If ITEM<INFO[PTR] ,then:
set LOC:=SAVE, and return
[end of if structure]
6. Else: Set SAVE:=PTR and PTR:=LINK[PTR] [update pointers]
[end of step 4 loop]
7.Set LOC:=SAVE
8.Exit
Insertion into a sorted list
• ALGORITHM 6
INSERT(INFO,LINK,START,AVAIL,ITEM)
This algorithm inserts ITEM into a sorted linked list.
1.[use PROCEDURE 1 to find the location of the node
preceding ITEM]
call FINDA(INFO,LINK,START,ITEM,LOC)
2.[use ALGORITHM 5 to insert ITEM after the node with
location LOC]
Call INSLOC(INFO,LINK,START,AVAIL,LOC,ITEM)
3.Exit
Deletion from a linked list
ALGORITHM 7
• DEL (INFO,LINK,START,AVAIL,LOC,LOCP)
This algorithm deletes the node N with location LOC.LOCP is the
location of the node which precedes N or when N is the first
node,LOCP=NULL
1.If LOCP=NULL, then: Set START:=LINK[START] [deletes first node]
Else: set LINK[LOCP]:=LINK[LOC] [deletes node N]
[end of if structure]
2.[Return deleted node to the AVAIL list]
set LINK[LOC]:=AVAIL and AVAIL:=LOC
3.Exit
Deletion with a given item
• Procedure 2
FINDB(INFO,LINK,START,ITEM,LOC,LOCP)
This procedure finds the LOC of the first node which contains ITEM & the location LOCP
of the node. If item appears in the first node then it sets LOCP=NULL
1. [list empty?] if START=NULL then set LOC:=NULL and LOCP=NULL and return
[end of if structure]
2. [ITEM in first node?] if INFO[START]=ITEM, then set LOC:=START and LOCP:=NULL and
return
[end of if structure]
3. Set SAVE:=START and PTR:=LINK[START]
4. Repeat steps 5 and 6 while PTR≠NULL
5.If INFO[PTR]=ITEM then set LOC:=PTR and LOCP:=SAVE and return
[end of if structure]
6. Set SAVE:=PTR and PTR:=LINK[PTR] [update pointer]
[END OF STEP 4 loop]
7.Set LOC:=NULL [search unsuccessful]
8.Return
Deletion with a given item
• DELETE(INFO,LINK,START,AVAIL,ITEM)
This algorithm deletes from a linked list the first node N which
contains the given ITEM of information
1.[use procedure 2 to find the location of N and its preceding node]
call FINDB(INFO,LINK,START,ITEM,LOC,LOCP]
2.If LOC=NULL , then : write ITEM not in the list and exit
3.[delete node]
If LOCP=NULL , then set START:=LINK[START]
Else: set LINK[LOCP]:=LINK[LOC]
[end of if structure]
4.[Return deleted node to the Avail list]
Set LINK[LOC]:=AVAIL and AVAIL:=LOC
5.Exit
Header Linked Lists
• Header linked list is a linked list which always contains a
special node called the Header Node, at the beginning of the
list.
• It has two types:
a) Grounded Header List
Last Node Contains the NULL Pointer
b) Circular Header List
Last Node Points Back to the Header Node
19
Grounded Header Link List
• A grounded header list is a header list where
the last node contains the null pointer.
• The term “grounded” comes from the fact
that many texts use the electrical ground
symbol to indicate the null pointer.
Start
Header Node
INFO
FORE Pointer
BACK pointer
Deletion from a Two way list
DELTWL(INFO,FORW,BACK,START,AVAIL,LOC)
1. [Delete node]
Set FORW[BACK[LOC]]:=FORW[LOC] and
BACK[FORW[LOC]]:=BACK[LOC]
2. [Return node to AVAIL list]
Set FORW[LOC]:=AVAIL and AVAIL:=LOC
3. Exit.
Insertion into a Two way list
• INSTWL(INFO,FORW,BACK,START,AVAIL,LOCA, LOCB,ITEM)
1. [OVERFLOW?] If AVAIL=NULL, then: Write OVERFLOW, and
Exit.
2. [Remove node from AVAIL list and copy new data into
node]
Set NEW:=AVAIL,AVAIL:=FORW[AVAIL], INFO[NEW]:=ITEM
3. [Insert node into list]
Set FORW[LOCA]:=NEW, FORW[NEW]:=LOCB,
BACK[LOCB]:=NEW, BACK[NEW]:=LOCA
4. Exit
Traversing a Circular Header List
Let LIST be a circular header list in memory. This algorithm
traverses LIST, applying an operation PROCESS to each node of
LIST.
1. Set PTR=LINK[START]. [Initializes the pointer PTR]
2. Repeat Steps 3 and 4 while PTR!=START
3. Apply PROCESS to INFO[PTR]
4. Set PTR=LINK[PTR]. [PTR now points to the next node]
[End of Step 2 loop]
5. EXIT
Search an ITEM in a Circular Header List
SRCHHL(INFO, LINK, START, ITEM, LOC)
LIST is a circular header list in memory. This algorithm finds the location
LOC of the node where ITEM first appears in LIST or sets LOC= NULL
1. Set PTR=LINK[START]
2. Repeat while INFO[PTR]!=ITEM AND PTR!=START
Set PTR=LINK[PTR]. [PTR now points to the next node]
[End of Loop]
3. If INFO[PTR]=ITEM, then:
Set LOC=PTR
Else
Set LOC=NULL
[END of IF structure]
4. EXIT
Deletion from a circular header list
Procedure 1
FINDBHL(INFO, START, ITEM, LOC, LOCP)
1. Set SAVE = START and PTR= LINK[START]. [Initializes pointers]
2. Repeat while INFO[PTR]!=ITEM and PTR!= START
Set SAVE=PTR and PTR= LINK[PTR]. [Updates pointers]
[End of Loop]
3. If INFO[PTR]= ITEM then:
Set LOC=PTR and LOCP=SAVE
Else
Set LOC=NULL and LOCP= SAVE
[End of If structure]
4. EXIT
Deletion from a circular header list
DELLOCHL(INFO, LINK, START, AVAIL, ITEM)
1. [Use Procedure 1 to find the location of N and its preceding
node.]
Call LINDBHL(INFO, LINK, START, ITEM, LOC, LOCP)
2. If LOC=NULL , then: Write: ITEM not in list, and Exit
3. Set LINK[LOCP]= LINK[LOC]. [Deletes node.]
4. [Return deleted node to the AVAIL list.]
Set LINK[LOC]=AVAIL and AVAIL=LOC.
5. EXIT