Предположим, что у меня есть связанный список, который хранит книгу структура и следующий указатель узла:проверить, если элемент уже существует в связанном списке в с
struct book {
unsigned short size_of_content;
unsigned short price;
unsigned char *content;
};
struct list {
struct book p;
struct list *next;
};
И когда я построения связного списка, я буду проверьте, совпадает ли цена новой книги с ценой одной из книг, которые были связаны. В основном убедитесь, что нет дублирующих цен.
У меня есть идея построить ценовой массив и сравнить новую цену с существующими. Однако, поскольку C не поддерживает неограниченный размер массивов, я не думаю, что мой путь - хорошая идея. Что мне делать? Спасибо
Зачем нужен дополнительный массив? Почему бы просто не пройти через связанный список и не проверить цены? Кроме того: пока ни один язык программирования в юниверсе никогда не будет поддерживать * неограниченные длины * массивы (не считая лениво оцениваемых языков), C, как и многие другие языки, поддерживает массивы * переменной длины *. – Kninnug
Если вы не хотите повторять элементы, создание упорядоченного дерева (время O (logn)) вместо списка может быть хорошей идеей. В противном случае вам придется проходить весь список каждый раз, что является O (n). – imreal
Связанный список является плохим выбором в этом случае. Используйте некоторую структуру данных для хранения книг, упорядоченных с использованием времени доступа O (log (n)) '' (например, дерева двоичного поиска), это невероятно быстро, чтобы проверить существующую цену. –