Lnked списки: как минимизировать временную и пространственную сложность в конкретном случае
Я постараюсь кратко описать проект, над которым работаю, а затем задам свой вопрос.
Проект:
Предположим, вы управляете интернет-магазином, который соединяет покупателей с продавцами. Итак, есть список товаров и список покупателей. Когда покупатель удовлетворен товаром, он кладет его в корзину, и товар удаляется из доступных товаров, показанных другим пользователям.
Что может произойти: покупатель может уйти, не проходя через кассу, чтобы выбранные им товары (если таковые имеются) снова были доступны для других пользователей, или продажа может быть отозвана у продавца, чтобы товар больше не был доступен, даже если он был в чьей-то корзине. Плюс ко всему меня могут попросить распечатать отчет о текущей ситуации в определенное время с описанием для каждого покупателя своей корзины.
Вопрос: у меня есть список действий, которые происходят, например "BUYER1 входит в систему", "ITEM11 продается" или "BUYER13 кладет ITEM1 в корзину" (мы пренебрегаем оформлением заказа), и мне было интересно, какая структура данных более подходит для обработки этого конкретного случая, в частности, какое решение является лучшим с точки зрения временной и пространственной сложности. Я должен реализовать свой проект В С.
Что я уже пробовал:
I came up with two possible solutions: I could store items data in a linked list of structures (with fields like Id, price etc.) named "available items" and store buyers data in a linked list of structures that contains a field named let's say "basket" which is a linked list of items and when a buyers puts a product in the basket the item is removed from the "available items" and appended to the "basket". The issue could be that when a sell is called off I don't know who put the item in the basket so I should go through the list of buyers and for each of them through their basket to delete the product. Or I could add a field to the items struct named let's say "buyerID" where I could change the value from 0 (the item is available) to the ID of the buyer that put the item in the basket but when I have to print a report for each buyer I have to go through the list of items to know what he is buying.
Не знаю, эффективны ли решения, которые я придумал, как с точки зрения временной, так и пространственной сложности. Не могли бы вы предложить мне лучшее решение? Заранее всем большое спасибо! Любая помощь будет оценена по достоинству.
nv3
Весь этот сценарий настолько нереалистичен, насколько это возможно. В реальной жизни все это будет происходить в базе данных, а не в структурах данных в памяти. Следовательно, это плохой пример. И пара других вещей также нереалистичны: вы не будете удалять товар из своего инвентаря, пока не будет размещен заказ. И конечно, вы не будете организовывать доступ к своим элементам в линейном списке. Вероятно, это не ваша вина, но какой-то неверный курс ведет вас в этом направлении. Есть лучшие примеры для вопросов, касающихся структур данных и их эффективности.