某百货公司仓库中有一批电视机,构成了一个单链表并存与计算机中,链表的结点指出同样价格的若干台。 【基本要求】 实现以下基本操作: (1) 从键盘输入电视机的信息,建立电视机链表。 (2) 从键盘输入电视机的信息,实现电视机查询操作。 (3) 从键盘输入电视机的信息,实现电视机入库操作。 (4) 从键盘输入电视机的信息,实现电视机出库操作。
时间: 2024-03-14 11:43:53 浏览: 46
好的,我会根据你的要求帮你解答这道题目。
首先,我们需要定义电视机的结构体,包括电视机的品牌、型号、价格等信息。代码如下:
```c
typedef struct TV {
char brand[20]; //品牌
char model[20]; //型号
float price; //价格
int count; //数量
struct TV *next; //指向下一个结点的指针
} TV;
```
接下来,我们可以实现从键盘输入电视机信息,建立电视机链表的功能。具体过程如下:
1. 定义一个指向链表头结点的指针`head`,并初始化为`NULL`。
2. 从键盘输入电视机的品牌、型号、价格、数量等信息,创建一个新的电视机结点`p`。
3. 将`p`插入到链表中,使得链表按价格从低到高排序。具体实现可以使用插入排序算法。
4. 重复步骤2和步骤3,直到输入完所有电视机的信息。
代码实现如下:
```c
TV *createLinkedList() {
TV *head = NULL; //链表头结点指针
TV *p, *q, *prev; //p是当前结点,q是插入位置,prev是p的前一个结点
int n; //电视机数量
printf("请输入电视机的数量:");
scanf("%d", &n);
for (int i = 1; i <= n; i++) {
printf("请输入第%d台电视机的信息:\n", i);
p = (TV *)malloc(sizeof(TV)); //创建新结点
printf("品牌:");
scanf("%s", p->brand);
printf("型号:");
scanf("%s", p->model);
printf("价格:");
scanf("%f", &p->price);
printf("数量:");
scanf("%d", &p->count);
p->next = NULL;
//按价格从低到高排序,插入到链表中
if (head == NULL) { //链表为空,直接插入
head = p;
} else {
q = head;
prev = NULL;
while (q != NULL && q->price < p->price) { //找到插入位置
prev = q;
q = q->next;
}
if (prev == NULL) { //插入到链表头
p->next = head;
head = p;
} else { //插入到链表中间或末尾
p->next = q;
prev->next = p;
}
}
}
return head;
}
```
然后,我们可以实现从键盘输入电视机信息,实现电视机查询、入库、出库操作的功能。具体过程如下:
1. 从键盘输入电视机的品牌、型号、价格等信息。
2. 在链表中查找是否存在符合条件的电视机结点,找到后进行相应的操作。
3. 如果不存在符合条件的电视机结点,则输出提示信息。
代码实现如下:
```c
void search(TV *head) {
char brand[20], model[20];
printf("请输入要查询的电视机的品牌和型号:");
scanf("%s %s", brand, model);
TV *p = head;
while (p != NULL) {
if (strcmp(p->brand, brand) == 0 && strcmp(p->model, model) == 0) {
printf("查询结果:品牌:%s,型号:%s,价格:%.2f,数量:%d\n", p->brand, p->model, p->price, p->count);
return;
}
p = p->next;
}
printf("没有找到符合条件的电视机!\n");
}
void in(TV *head) {
char brand[20], model[20];
int count;
printf("请输入要入库的电视机的品牌和型号:");
scanf("%s %s", brand, model);
printf("请输入要入库的数量:");
scanf("%d", &count);
TV *p = head;
while (p != NULL) {
if (strcmp(p->brand, brand) == 0 && strcmp(p->model, model) == 0) {
p->count += count;
printf("入库成功!当前库存:%d\n", p->count);
return;
}
p = p->next;
}
printf("没有找到符合条件的电视机!\n");
}
void out(TV *head) {
char brand[20], model[20];
int count;
printf("请输入要出库的电视机的品牌和型号:");
scanf("%s %s", brand, model);
printf("请输入要出库的数量:");
scanf("%d", &count);
TV *p = head;
while (p != NULL) {
if (strcmp(p->brand, brand) == 0 && strcmp(p->model, model) == 0) {
if (p->count >= count) {
p->count -= count;
printf("出库成功!当前库存:%d\n", p->count);
} else {
printf("库存不足,无法出库!\n");
}
return;
}
p = p->next;
}
printf("没有找到符合条件的电视机!\n");
}
```
最后,我们可以在主函数中调用以上函数,完成整个程序的功能。完整代码如下: