Lecture A9 Linked Lists - PowerPoint PPT Presentation

1 / 56
About This Presentation
Title:

Lecture A9 Linked Lists

Description:

CSE1303 Part A. 3. List Operations. Go to a position in the list. ... CSE1303 Part A. 8. Set Position. check if position is within range. start with address of ... – PowerPoint PPT presentation

Number of Views:66
Avg rating:3.0/5.0
Slides: 57
Provided by: kymberlyf
Category:
Tags: lecture | linked | lists | part

less

Transcript and Presenter's Notes

Title: Lecture A9 Linked Lists


1
Lecture A9Linked Lists
  • CSE1303 Part A
  • Data Structures and Algorithms

2
Overview
  • Operations for Lists.
  • Implementation of Linked Lists.
  • Double Linked Lists.

3
List Operations
  • Go to a position in the list.
  • Insert an item at a position in the list.
  • Delete an item from a position in the list.
  • Retrieve an item from a position.
  • Replace an item at a position.
  • Traverse a list.

4
Comparsion
  • Linked Storage
  • Unknown list size.
  • Flexibility is needed.
  • Contiguous Storage
  • Known list size.
  • Few insertions and deletions are made within the
    list.
  • Random access

5
Linked List
Head
0
1
2
3
6
ifndef LINKEDLISTH define LINKEDLISTH include
ltstdbool.hgt include node.h struct
LinkedListRec int count Node
headPtr typedef struct LinkedListRec
List void intializeList(List listPtr) bool
listEmpty(const List listPtr) Node
setPosition(const List listPtr, int
position) void insertItem(List listPtr, float
item, int position) float deleteNode(List
listPtr, int position) endif
7
Initialize List
listPtr
addr of list
count
0
headPtr
NULL
void initializeList(List listPtr)
listPtr-gtheadPtr NULL listPtr-gtcount 0
8
Set Position
  • check if position is within range
  • start with address of head node
  • set count to 0
  • while count is less than position
  • follow link to next node
  • increment count
  • return address of current node

9
Set Position
Head
0
2
1
2
position
10
Node setPosition(const List listPtr, int
position) int i Node nodePtr
listPtr-gtheadPtr if (position lt 0 position
gt listPtr-gtcount) fprintf(stderr,
Invalid position\n) exit(1) else
for (i 0 i lt position i) nodePtr
nodePtr-gtnextPtr return
nodePtr
11
Set Position
Head
0x30a8
0x2030
0x4000
2
position
0
i
0x4000
NodePtr
12
Set Position
Head
0x30a8
0x2030
0x4000
2
position
0
i
0x4000
NodePtr
13
Set Position
Head
0x30a8
0x2030
0x4000
2
position
1
i
0x2030
NodePtr
14
Set Position
Head
0x30a8
0x2030
0x4000
2
position
2
i
0x30a8
NodePtr
15
Insert
Head
0
2
1
If we insert it at position 0.
1
0
2
Head
16
Insert
Head
0
2
1
If we insert it at position 0.
17
Instead, suppose we insert it at position 1.
Head
1
0
2
18
Instead, suppose we insert it at position 1.
Head
19
void insertItem(List listPtr, float item, int
position) Node newNodePtr
makeNode(item) Node nodePtr NULL if
(position 0) newNodePtr-gtnextPtr
listPtr-gtheadPtr listPtr-gtheadPtr
newNodePtr else nodePtr
setPosition(listPtr, position-1)
newNodePtr-gtnextPtr nodePtr-gtnextPtr
nodePtr-gtnextPtr newNodePtr
listPtr-gtcount
20
Inserting New List
0x30a8
Head
NULL
0
position
0x30a8
newNodePtr
21
Inserting New List
0x30a8
Head
0
position
0x30a8
newNodePtr
22
Inserting Start of List
Head
Head
0x30a8
0x2008
0x2000
0x2000
newNodePtr
0
position
23
Inserting Start of List
Head
Head
0x30a8
0x2008
0x2000
0x2000
newNodePtr
0
position
24
Inserting Start of List
Head
Head
0x30a8
0x2008
0x2000
0x2000
newNodePtr
0
position
25
Inserting Inside the List
Head
0x3080
0x3050
NodePtr
0x3080
0x2000
0x2000
newNodePtr
1
position
26
Inserting Inside the List
Head
0x3080
0x3050
NodePtr
0x3080
0x2000
0x2000
newNodePtr
1
position
27
Inserting Inside the List
Head
0x3080
0x3050
NodePtr
0x3080
0x2000
0x2000
newNodePtr
1
position
28
Delete
Head
2
3
1
0
If we delete the Node at position 0.
29
If we delete the Node at position 2.
Head
2
3
1
0
30
If we delete the Node at position 2.
Head
2
31
void deleteNode(List listPtr, int position)
Node oldNodePtr NULL Node nodePtr
NULL if (listPtr-gtcount gt 0 position lt
listPtr-gtcount) if (position 0)
oldNodePtr listPtr-gtheadPtr
listPtr-gtheadPtr oldNodePtr-gtnextPtr
else nodePtr setPosition(listPtr,
position - 1) oldNodePtr
nodePtr-gtnextPtr nodePtr-gtnextPtr
oldNodePtr-gtnextPtr
listPtr-gtcount-- free(oldNodePtr)
else fprintf(stderr, List is empty or
invalid position.\n) exit(1)
32
Deleting 1st Node
Head
0x30a8
0x2030
0x4000
0
position
0x4000
NodePtr
33
Deleting 1st Node
0x30a8
0x2030
0x4000
Head
0
position
0x4000
NodePtr
34
Deleting 1st Node
0x30a8
0x2030
Head
0
position
0x4000
NodePtr
35
Deleting Middle Node
Head
0x30a8
0x2030
0x4000
1
position
0x2030
NodePtr
0x2030
OldNodePtr
36
Deleting Middle Node
Head
0x30a8
0x2030
0x4000
1
position
0x2030
NodePtr
0x2030
OldNodePtr
37
Deleting Middle Node
Head
0x30a8
0x4000
1
position
0x2030
NodePtr
0x2030
OldNodePtr
38
Double Linked List Operations
  • Go to a position in the list.
  • Insert an item in a position in the list.
  • Delete an item from a position in the list.
  • Retrieve an item from a position.
  • Replace an item at a position.
  • Traverse a list, in both directions.

39
Double Linked List
0
1
2
3
4
Current
40
struct DoubleLinkNodeRec float
value struct DoubleLinkNodeRec
nextPtr struct DoubleLinkNodeRec
previousPtr typedef struct DoubleLinkNodeRec
Node struct DoubleLinkListRec int
count Node currentPtr int
position typedef struct DoubleLinkListRec
DoubleLinkList
41
Insert at end
0x4000
0x3080
0x2030
0x2000
0x3080
0x2030
NULL
NULL
NULL
0x4000
0x3080
NULL
0x2030
currentPtr
prevPtr
newPtr
0x2000
42
Insert at end
0x4000
0x3080
0x2030
0x2000
0x3080
0x2030
0x2000
NULL
NULL
0x4000
0x3080
NULL
0x2030
currentPtr
prevPtr
newPtr
0x2000
43
Insert at end
0x4000
0x3080
0x2030
0x2000
0x3080
0x2030
0x2000
NULL
NULL
0x4000
0x3080
0x2030
0x2030
currentPtr
prevPtr
newPtr
0x2000
44
Insert inside the list
0x4000
0x3080
0x2030
0x3080
0x2030
NULL
NULL
0x4000
0x3080
0x2000
0x3080
currentPtr
0x2000
prevPtr
NULL
newPtr
NULL
45
Insert inside the list
0x4000
0x3080
0x2030
0x3080
0x2030
NULL
NULL
0x4000
0x3080
0x2000
0x3080
currentPtr
0x2000
prevPtr
2030
newPtr
NULL
46
Insert inside the list
0x4000
0x3080
0x2030
0x3080
0x2030
NULL
NULL
0x4000
0x3080
0x2000
0x3080
currentPtr
0x2000
prevPtr
2030
newPtr
3080
47
Insert inside the list
0x4000
0x3080
0x2030
0x3080
0x2030
NULL
NULL
0x4000
0x2000
0x2000
0x3080
currentPtr
0x2000
prevPtr
2030
newPtr
3080
48
Insert inside the list
0x4000
0x3080
0x2030
0x3080
0x2000
NULL
NULL
0x4000
0x2000
0x2000
0x3080
currentPtr
0x2000
prevPtr
2030
newPtr
3080
49
Delete from end
0x4000
0x3080
0x2030
0x3080
0x2030
NULL
NULL
0x4000
0x3080
oldPtr
0x2030
currentPtr
0x3080
prevPtr
50
Delete from end
0x4000
0x3080
0x2030
0x3080
NULL
NULL
NULL
0x4000
0x3080
oldPtr
0x2030
currentPtr
0x3080
prevPtr
51
Delete from end
0x4000
0x3080
0x3080
NULL
NULL
0x4000
oldPtr
0x2030
currentPtr
0x3080
prevPtr
52
Delete from inside list
0x4000
0x3080
0x2030
0x3080
0x2030
NULL
NULL
0x4000
0x3080
oldPtr
0x3080
currentPtr
0x4000
prevPtr
53
Delete from inside list
0x4000
0x3080
0x2030
0x2030
0x2030
NULL
NULL
0x4000
0x3080
oldPtr
0x3080
currentPtr
0x4000
prevPtr
54
Delete from inside list
0x4000
0x3080
0x2030
0x2030
0x2030
NULL
NULL
0x4000
0x4000
oldPtr
0x3080
currentPtr
0x4000
prevPtr
55
Delete from inside list
0x4000
0x2030
0x2030
NULL
NULL
0x4000
oldPtr
0x3080
Head
currentPtr
0x4000
prevPtr
56
Revision
  • Linked List.
  • Benefits of different implementations.
  • Double Linked List.

Preparation
  • Read Chapter 6 in Kruse et al.
Write a Comment
User Comments (0)
About PowerShow.com