0% found this document useful (0 votes)
49 views9 pages

Linked Lists: Suppose We Have A Long List of Integers

Linked lists are an alternative to arrays for storing a list of items. A linked list stores items by linking each node to the next using pointers, rather than storing all items in contiguous memory locations like an array. Each linked list node contains a data element and a pointer to the next node. Operations on linked lists include allocating and freeing memory for nodes, inserting and deleting nodes, and traversing the list. Doubly linked lists add a pointer to the previous node for each node.

Uploaded by

osmansio
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
49 views9 pages

Linked Lists: Suppose We Have A Long List of Integers

Linked lists are an alternative to arrays for storing a list of items. A linked list stores items by linking each node to the next using pointers, rather than storing all items in contiguous memory locations like an array. Each linked list node contains a data element and a pointer to the next node. Operations on linked lists include allocating and freeing memory for nodes, inserting and deleting nodes, and traversing the list. Doubly linked lists add a pointer to the previous node for each node.

Uploaded by

osmansio
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 9

Linked Lists

Suppose we have a long list of


integers
3
14
7
8
23
5
.
.
.
list
items
position
1
2
3
4
5
6
.
.
.
It is natural for us
to think of storing
these items in a
1-dimensional array:
(On our systems,
each integer is stored
in a 4-byte chunk
of memory)
3
14
7
8
23
5
.
.
.
array
elements index
0
1
2
3
4
5
.
.
.
u Array elements (in C/C++) are stored
next to one another in memory
u An array element's memory location
is found by doing arithmetic with the
array index and the start of the array
u int MyArray[200];
int i, j;
. . .
j = MyArray[i];
MyArray is a pointer.
This refers to the integer
stored at location
(MyArray + 4*i)
An array may seem natural for storing a
list, but it brings some problems
m
o
v
e


i
t
e
m
s

3
14
7
8
23
5
.
.
.
Suppose we need to delete the item "7" from our list:
3
14
7
8
23
5
37
.
.
.
initial
array index
0
1
2
3
4
5
6
.
.
.
3
14
8
23
5
37
.
.
.
resulting
array index
0
1
2
3
4
5
.
.
.
work, work, work
m
o
v
e


i
t
e
m
s

3
14
8
23
5
37
.
.
Now suppose we need to insert "79" near the front of this list:
3
14
8
23
5
37
.
.
.
initial
array index
0
1
2
3
4
5
.
.
.
3
14
79
8
23
5
37
.
.
.
resulting
array index
0
1
2
3
4
5
.
.
.
work, work, work
79
Another problem:
u Suppose this array is for storing a list:
int MyArray[200];
u When the program runs,
if there are only a few list items, then we have
been wasteful with memory allocation
but if the list has 201 or more items,
then our program cannot accommodate the list
u Instead of compile-time allocation,
run-time memory allocation might be
better
A linked list is an alternative to an array
u A linked list is a sequence of nodes, in which
each node contains a data element, and
each node (except the last) links to a
successor node
3
14
7
44
NULL
...
These nodes can be anywhere in memory.
We will use pointers to link the nodes.
By convention, the NULL pointer indicates the end of the
linked list.
Implementing linked lists in C++
u It makes sense to use C++ pointers
to link the nodes in a linked list
u For one node, we'll use a struct to
group together a data item and a
pointer
u We'll use new and delete to
allocate/deallocate the memory for
each node at run-time, as needed
u struct listNode;
typedef listNode
*ptrType;
struct listNode
{
int Item;
ptrType Next;
};
u Now we could write
ptrType P;
P = new listNode;
P->Item = 3;
P->Next = NULL;
delete P;
This introduces a linked-
list node, to be defined
later; no memory is
allocated
allocate memory for a
pointer
This describes the
components of the
struct;
no memory is
allocated
allocate memory
for a node
deallocate node's memory
Summary:
implementing linked lists in C++
u Use a struct to represent a node in the
linked list
u One field in the struct will contain the
data for a particular node (this could also
be a struct )
u One field in the struct will be a pointer
to the next node
u At the last node of the list, store NULL as
the pointer (to indicate the end of the list)
What operations do we need for
linked lists?
u a way to allocate memory for a new
node (we just did this!), and a way to
deallocate memory for a node that is no
longer needed
u node insertion
u node deletion
u (possibly) special consideration of first or
last nodes
u a way to progress through the linked list
Review
u We have studied arrays
and linked lists
u These are examples of
low-level data structures
u We can use them to implement
higher-level Abstract Data Types
... 3 14 7 8 23 5
...
7 14 3
u This will allocate memory for a node:
u This will deallocate the memory:
(Every chunk of memory that is obtained by
new should be deleted before exiting the
program.)
ptrType P;
P = new listNode;
delete P;
Variations on the linked-list
concept
u Singly linked lists (we just studied
this)
u Doubly linked lists
(also called two-way linked lists,
or symmetrically linked lists)
u Circular linked lists
(can be singly or doubly linked)
Doubly linked lists
u Each node (except the first and last)
links to its successor and predecessor
nodes
3
14

7

8

...
Need to add another pointer, for a
doubly linked list
struct listNode;
typedef listNode *ptrType;
struct listNode
{
int Item;
ptrType Next;
ptrType Previous;
};
Summary
uArrays and linked lists are examples
of low-level data structures
uMany ADTs can be implemented
using either arrays or linked lists
uThe concept of linked lists is
fairly simple
uIn C/C++, the only problem is to
keep track of pointers and memory

You might also like