Описание задачи
Реализовать функции для работы со структурой данных, которая поддерживается в двух порядках одновременно:
- Хронологический — порядок добавления (двусвязный список)
- Алфавитный — отсортированный порядок (односвязный список)
Структуры данных
struct Item {
char* m_Text; // Текст элемента
Item* m_Next; // Следующий (хронологически)
Item* m_Prev; // Предыдущий (хронологически)
Item* m_NextSorted; // Следующий (алфавитно)
};
struct List {
Item* m_First; // Первый (хронологически)
Item* m_Last; // Последний (хронологически)
Item* m_FirstSorted; // Первый (алфавитно)
};
Функции для реализации
- Add(list, text) — добавляет элемент:
- В конец хронологического списка
- В нужное место отсортированного списка
- Search(list, text) — ищет элемент:
- Если найден — перемещает на одну позицию ближе к началу в хронологическом списке (swap с предыдущим)
- Сортированный порядок не меняется!
Пример работы
Операции
Add("Charlie") Add("Alice") Add("Bob") Хронологически: Charlie ↔ Alice ↔ Bob Алфавитно: Alice → Bob → Charlie Search("Bob") Хронологически: Charlie ↔ Bob ↔ Alice (Bob и Alice поменялись) Алфавитно: Alice → Bob → Charlie (без изменений)
Ключевые моменты
- Внимательно обновлять указатели при swap
- Крайние случаи: swap с первым/последним элементом
- m_NextSorted — односвязный, только вставка по порядку
- Копировать строку при добавлении (strdup)