Data Structures and Algorithms: Linked Lists Stacks PLSD210 (Ii)
Data Structures and Algorithms: Linked Lists Stacks PLSD210 (Ii)
Linked Lists
Stacks
PLSD210(ii)
Array Limitations
• Arrays
• Simple,
• Fast
but
• Must specify size at construction time
• Murphy’s law
• Construct an array with space for n
• n = twice your estimate of largest collection
• Tomorrow you’ll need n+1
• More flexible system?
Linked Lists
• Flexible space use
• Dynamically allocate space for each element as
needed
• Include a pointer to the next item
Linked list
• Each node of the list contains
• the data item (an object pointer in our ADT)
• a pointer to the next node
Data Next
object
Linked Lists
• Collection structure has a pointer to the list head
• Initially NULL
Collection
Head
Linked Lists
• Collection structure has a pointer to the list head
• Initially NULL
• Add first item
• Allocate space for node
• Set its data pointer to object
• Set Next to NULL
• Set Head to point to new node
Collection
node
Head
Data Next
object
Linked Lists
• Add second item
• Allocate space for node
• Set its data pointer to object
• Set Next to current Head
• Set Head to point to new node
Collection
Head
node
node
Data Next
Data Next
object2
object
Linked Lists - Add implementation
• Implementation
struct t_node {
void *item;
struct t_node *next;
} node;
typedef struct t_node *Node;
struct collection {
Node head;
……
};
int AddToCollection( Collection c, void *item ) {
Node new = malloc( sizeof( struct t_node ) );
new->item = item;
new->next = c->head;
c->head = new;
return TRUE;
}
Linked Lists - Add implementation
• Implementation
struct t_node {
void *item;
Recursive type definition -
struct t_node *next;
C allows it!
} node;
typedef struct t_node *Node;
struct collection {
Node head;
……
};
int AddToCollection( Collection c, void *item ) {
Node new = malloc( sizeof( struct t_node ) );
new->item = item;
new->next = c->head;
c->head = new;
Error checking, asserts
return TRUE;
omitted for clarity!
}
Linked Lists
• Add time
• Constant - independent of n
• Search time
• Worst case - n
Collection
Head
node
node
Data Next
Data Next
object2
object
Linked Lists - Find implementation
• Implementation
tail
Stacks
• Stacks are a special form of collection
with LIFO semantics
• Two methods
• int push( Stack s, void *item );
- add item to the top of the stack
• void *pop( Stack s );
- remove an item from the top of the stack
• Like a plate stacker
• Other methods
tail