С чего начать ... Прежде всего, структура данных очереди особо не используется ни для чего. Но это не корень вашей проблемы. Это лежит здесь:
void displayQueue() {
while( dataNode_P_A != NULL ) {
cout << dataNode_P_A->data << endl;
dataNode_P_A++;
}
}
При переборе связанного списка вы переходите к следующему элементу, переходя к -> предыдущему:
void displayQueue() {
while( dataNode_P_A != NULL ) {
cout << dataNode_P_A->data << endl;
dataNode_P_A = dataNode_P_A->previous;
}
}
Сказав это, вы делаете некоторые другие вещи, которые вызывают сомнения - например, изменение вашего глобального списка (dataNode_P_A). Это не проблема в вашем примере, но она может быть проблемой, если вы когда-нибудь захотите что-то сделать со списком, кроме его отображения.
Вот еще одна версия displayQueue, у которой нет этой проблемы:
void displayQueue() {
node *entry = dataNode_P_A;
while( entry != NULL ) {
cout << entry->data << endl;
entry = entry->previous;
}
}