请用C语言数据结构线性表完成程序的书写,要求如下:飞机到达目的地后,游客的行李会进入传送带,由游客自行在取行李处拿取,虽然机场出口处,有工作人员在检查,但也难免会出现拿错行李的事情。请为机场设计一个游客取行李的程序,游客在取行李处,输入自己的身份证号后才能取到自己的行李。 要求: 使用线性表实现行李存储,行李信息表如下: 行李编号 行李航班 姓名 身份证号 行李状态 001 UC8866 张里 510199909090002 到达 002 NI7755 李丽 510200012290001 已取 003 MQ9090 王一 510198810090003 未取 004 BU8080 赵山 610197708080022 未到达 游客输入身份证号,即可获取对应行李箱状态,并领取本人行李箱。 显示欢迎类语句,为游客增加美好的体验感。 代码符合规范,正确、易读、易操作。 分析代码的运行效率,如时间复杂度和空间复杂度。
时间: 2023-10-06 08:10:05 浏览: 139
以下是使用链表实现的代码,实现了输入身份证号查找对应行李箱状态,以及领取本人行李箱的功能。
```
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 行李箱信息结构体
typedef struct Luggage {
char id[19]; // 身份证号
char flight[8]; // 航班号
char name[20]; // 姓名
char num[4]; // 行李编号
char state[4]; // 行李状态
struct Luggage *next;
} Luggage;
// 初始化链表
Luggage *initList() {
Luggage *head = (Luggage *)malloc(sizeof(Luggage));
head->next = NULL;
return head;
}
// 添加行李箱信息到链表中
void addLuggage(Luggage *head, Luggage *luggage) {
Luggage *p = head;
while (p->next != NULL) {
p = p->next;
}
p->next = luggage;
luggage->next = NULL;
}
// 根据身份证号查找行李箱信息
Luggage *findLuggage(Luggage *head, char *id) {
Luggage *p = head->next;
while (p != NULL) {
if (strcmp(p->id, id) == 0) {
return p;
}
p = p->next;
}
return NULL;
}
// 修改行李箱状态
void updateLuggageState(Luggage *luggage, char *state) {
strcpy(luggage->state, state);
}
// 删除行李箱信息
void deleteLuggage(Luggage *head, char *num) {
Luggage *p = head;
while (p->next != NULL) {
if (strcmp(p->next->num, num) == 0) {
Luggage *temp = p->next;
p->next = temp->next;
free(temp);
return;
}
p = p->next;
}
}
// 显示欢迎语句
void welcome() {
printf("欢迎光临我们的机场,请输入您的身份证号:\n");
}
// 显示行李箱状态
void showLuggageState(Luggage *luggage) {
printf("您的行李箱状态为:%s\n", luggage->state);
}
// 领取本人行李箱
void takeLuggage(Luggage *head, Luggage *luggage) {
updateLuggageState(luggage, "已取");
deleteLuggage(head, luggage->num);
printf("您已成功领取行李箱,祝您旅途愉快!\n");
}
int main() {
// 初始化链表
Luggage *head = initList();
// 添加初始行李箱信息
Luggage *l1 = (Luggage *)malloc(sizeof(Luggage));
strcpy(l1->id, "510199909090002");
strcpy(l1->flight, "UC8866");
strcpy(l1->name, "张里");
strcpy(l1->num, "001");
strcpy(l1->state, "到达");
addLuggage(head, l1);
Luggage *l2 = (Luggage *)malloc(sizeof(Luggage));
strcpy(l2->id, "510200012290001");
strcpy(l2->flight, "NI7755");
strcpy(l2->name, "李丽");
strcpy(l2->num, "002");
strcpy(l2->state, "已取");
addLuggage(head, l2);
Luggage *l3 = (Luggage *)malloc(sizeof(Luggage));
strcpy(l3->id, "510198810090003");
strcpy(l3->flight, "MQ9090");
strcpy(l3->name, "王一");
strcpy(l3->num, "003");
strcpy(l3->state, "未取");
addLuggage(head, l3);
Luggage *l4 = (Luggage *)malloc(sizeof(Luggage));
strcpy(l4->id, "610197708080022");
strcpy(l4->flight, "BU8080");
strcpy(l4->name, "赵山");
strcpy(l4->num, "004");
strcpy(l4->state, "未到达");
addLuggage(head, l4);
// 显示欢迎语句
welcome();
// 输入身份证号,查找对应行李箱状态
char id[19];
scanf("%s", id);
Luggage *luggage = findLuggage(head, id);
if (luggage == NULL) {
printf("没有找到您的行李箱信息,请联系工作人员!\n");
return 0;
}
showLuggageState(luggage);
// 领取本人行李箱
char choice;
printf("是否领取本人行李箱?(Y/N)\n");
scanf(" %c", &choice);
if (choice == 'Y' || choice == 'y') {
takeLuggage(head, luggage);
}
return 0;
}
```
时间复杂度:
- 添加行李箱信息到链表中:O(n)
- 根据身份证号查找行李箱信息:O(n)
- 修改行李箱状态:O(1)
- 删除行李箱信息:O(n)
空间复杂度:
- 初始化链表:O(1)
- 添加行李箱信息到链表中:O(1)
- 根据身份证号查找行李箱信息:O(1)
- 修改行李箱状态:O(1)
- 删除行李箱信息:O(1)
阅读全文