A queue can be implemented either destructively or nondestructively. In a destructive implementation, when you insert a value into the queue, you modify the queue. In a nondestructive implementation, you create a new queue, leaving the old one, with its old content, still available.