# global variable 'result' contains the result
function AddToQueue () {
  local i
  local q

  # last argument is new element
  i=0
  for e in $*
  do
    q[$i]=$e
    let "i++"
  done
  echo "after: ${q[@]}"
  result=${q[@]}
}

# global variable 'first' contains the result
# 'result' contains the new queue
function RemoveFromQueue () {
  local i
  local q

  first=$1
  i=0
  shift
  for e in $*
  do
    q[$i]=$e
    let "i++"
  done
  result=${q[@]}
}

qu=""
AddToQueue ${qu[*]} "First"
qu=$result
echo ${qu[@]}

AddToQueue ${qu[*]} "Second"
qu=$result
echo ${qu[@]}

AddToQueue ${qu[*]} "Third"
qu=$result
echo ${qu[@]}

RemoveFromQueue ${qu[*]}
qu=$result
echo $first

RemoveFromQueue ${qu[*]}
qu=$result
echo $first
