1.
fin.read(reinterpret_cast <char*>(&p), sizeof p);
Это неправильная запись. Ты записываешь в нулевой элемент структуры(класса) все данные(все страницы). Тут надо цикл который каждую "страницу" будет записывать в i-тый элемент структуры.
2.
...
else if (list == '<')
{
i = i - 1;
...
Возвращение назад по странице. Нет проверки на отрицательное i. Если и будет меньше 0, программа вылетит с ошибкой "выход за границы массива".