Store two items for each "item".  The value (of course) and the "time" which is an ever-increasing integer.
So, using your data, assuming that 1 through 4 were accessed in order:
(1, 1), (2, 2), (3, 3), (4, 4)
access "1" (sorted by time for clarity, time = 5)
(2, 2), (3, 3), (4, 4), (1, 5)
access "2" (sorted by time for clarity, time = 6)
(3, 3), (4, 4), (1, 5), (2, 6)
access "5" which will not be found, causing a cache miss.  To find the "space" to store the "5", we need to flush the Least Recently Used (LRU).  This means dropping "3".  Note that time = 7.
(4, 4), (1, 5), (2, 6), (5, 7)
access "1" (sorted by time for clarity, time = 8)
(4, 4), (2, 6), (5, 7), (1, 8)
access "2" (sorted by time for clarity, time = 9)
(4, 4), (5, 7), (1, 8), (2, 9)
access "3" which will not be found, causing a cache miss.  To find the "space" to store the "3", we need to flush the Least Recently Used (LRU).  This means dropping "4".  Note that time = 10.
(5, 7), (1, 8), (2, 9), (3, 10)
access "4" which will not be found, causing a cache miss.  To find the "space" to store the "4", we need to flush the Least Recently Used (LRU).  This means dropping "5".  Note that time = 11.
(1, 8), (2, 9), (3, 10), (4, 11)
access "5" which will not be found, causing a cache miss.  To find the "space" to store the "5", we need to flush the Least Recently Used (LRU).  This means dropping "1".  Note that time = 12.
(2, 9), (3, 10), (4, 11), (5, 12)
Now that you know how the item to be flushed was selected, and have a working example, the flushing of the item without moving it around in the array is up to you to implement.
--- Edited With additional explanation ---
Ok, the idea of showing stuff in list form seems to have raised a few questions, so I'll show it in array form
Access 1, cache miss, empty slot available, store in first available slot
Value   Age
1       1
---     ---
---     ---
---     ---
Access 2, cache miss, empty slot available, store in first available slot
Value   Age
1       1
2       2
---     ---
---     ---
Access 3, cache miss, empty slot available, store in first available slot
Value   Age
1       1
2       2
3       3
---     ---
Access 4, cache miss, empty slot available, store in first available slot
Value   Age
1       1
2       2
3       3
4       4
Access 1, cache hit, update access time
Value   Age
1       5
2       2
3       3
4       4
Access 2, cache hit, update access time
Value   Age
1       5
2       6
3       3
4       4
Access 5, cache miss, no available empties, discard and replace "least recently used"
Value   Age
1       5
2       6
5       7
4       4
Access 1, cache hit, update access time
Value   Age
1       8
2       6
5       7
4       4
Access 2, cache hit, update access time
Value   Age
1       8
2       9
5       7
4       4
Access 3, cache miss, no available empties, discard and replace "least recently used"
Value   Age
1       8
2       9
5       7
3       10
Access 4, cache miss, no available empties, discard and replace "least recently used"
Value   Age
1       8
2       9
4       11
3       10
Access 5, cache miss, no available empties, discard and replace "least recently used"
Value   Age
5       12
2       9
4       11
3       10