请使用线性表编写程序,实现一在线商城对商品进行管理,商城客户可以查询商品信息,商城的商家可以添加、删除、查询、修改自己发布的商品信息。 要求: 商品用户分为客户和商家。 客户可以在程序中查询商家发布的商品信息。 商家可以在程序中对自己发布的商品进行添加、删除、查询、修改操作。 使用线性表实现 代码符合规范,正确、易读、易操作。 分析代码的运行效率,如时间复杂度和空间复杂度
时间: 2024-02-16 15:04:41 浏览: 21
好的,我会为您解答这道题目。
首先,我们需要设计商品信息的数据结构。可以使用一个结构体来表示商品信息,包括商品名称、商品价格、商品描述等属性。
```c
typedef struct {
char name[50];
float price;
char description[100];
} Item;
```
接下来,我们需要为商城客户和商家分别设计不同的操作。客户只能查询商品信息,而商家可以添加、删除、查询、修改自己发布的商品信息。
为了实现这些操作,我们可以使用一个链表来存储商品信息。链表中的每个节点代表一个商品,节点包含商品信息以及指向下一个节点的指针。链表的头指针指向第一个节点。
```c
typedef struct node {
Item item;
struct node *next;
} Node;
typedef struct {
Node *head;
} LinkedList;
```
接下来,我们就可以根据题目要求来实现相应的操作了。
1. 客户查询商品信息
客户可以遍历整个链表,输出每个商品的信息。
```c
void showItems(LinkedList *list) {
Node *p = list->head;
while (p != NULL) {
printf("Name: %s\nPrice: %.2f\nDescription: %s\n", p->item.name, p->item.price, p->item.description);
p = p->next;
}
}
```
2. 商家添加商品信息
商家可以在链表的末尾添加一个新的节点,代表一个新的商品。商家需要输入商品的名称、价格和描述。
```c
void addItem(LinkedList *list) {
Node *p = list->head;
while (p->next != NULL) {
p = p->next;
}
Node *newNode = (Node *)malloc(sizeof(Node));
printf("Enter name: ");
scanf("%s", newNode->item.name);
printf("Enter price: ");
scanf("%f", &(newNode->item.price));
printf("Enter description: ");
scanf("%s", newNode->item.description);
newNode->next = NULL;
p->next = newNode;
}
```
3. 商家删除商品信息
商家可以根据商品名称删除一个节点,代表删除一个商品。
```c
void deleteItem(LinkedList *list) {
char name[50];
printf("Enter name of item to delete: ");
scanf("%s", name);
Node *p = list->head;
while (p->next != NULL && strcmp(p->next->item.name, name) != 0) {
p = p->next;
}
if (p->next == NULL) {
printf("Item not found\n");
return;
}
Node *temp = p->next;
p->next = temp->next;
free(temp);
printf("Item deleted\n");
}
```
4. 商家修改商品信息
商家可以根据商品名称修改一个节点,代表修改一个商品的信息。
```c
void modifyItem(LinkedList *list) {
char name[50];
printf("Enter name of item to modify: ");
scanf("%s", name);
Node *p = list->head;
while (p != NULL && strcmp(p->item.name, name) != 0) {
p = p->next;
}
if (p == NULL) {
printf("Item not found\n");
return;
}
printf("Enter new name: ");
scanf("%s", p->item.name);
printf("Enter new price: ");
scanf("%f", &(p->item.price));
printf("Enter new description: ");
scanf("%s", p->item.description);
printf("Item modified\n");
}
```
代码的时间复杂度和空间复杂度主要取决于链表的长度。遍历链表的时间复杂度是 O(n),添加、删除、修改节点的时间复杂度是 O(1)。空间复杂度也是 O(n),因为需要为每个商品信息分配一个节点的空间。