1. 线性表题目1: 飞机到达目的地后,游客的行李会进入传送带,由游客自行在取行李处拿取,虽然机场出口处,有工作人员在检查,但也难免会出现拿错行李的事情。请为机场设计一个游客取行李的程序,游客在取行李处,输入自己的身份证号后才能取到自己的行李。 要求: 使用线性表实现行李存储,行李信息表如下: 行李编号 行李航班 姓名 身份证号 行李状态 001 UC8866 张里 510199909090002 到达 002 NI7755 李丽 510200012290001 已取 003 MQ9090 王一 510198810090003 未取 004 BU8080 赵山 610197708080022 未到达 游客输入身份证号,即可获取对应行李箱状态,并领取本人行李箱。 显示欢迎类语句,为游客增加美好的体验感。 代码符合规范,正确、易读、易操作。 分析代码的运行效率,如时间复杂度和空间复杂度。
时间: 2023-10-07 21:12:15 浏览: 39
这道题目可以使用链表来实现,每一个节点代表一个行李箱,节点中存储行李箱的信息,链表中按照身份证号的大小顺序排列。
具体实现流程如下:
1. 定义一个节点结构体,包含行李箱的信息:编号、航班、姓名、身份证号和状态。
2. 定义一个链表结构体,包含头节点指针和链表长度。
3. 实现链表的插入操作,按照身份证号大小顺序插入节点。
4. 实现链表的查找操作,根据身份证号查找节点。
5. 实现程序的交互操作,输入身份证号,显示欢迎语句,并查找对应的行李箱状态,输出结果。
代码示例:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_LEN 20
// 行李箱信息
typedef struct Luggage {
char id[MAX_LEN]; // 身份证号
char no[MAX_LEN]; // 行李编号
char flight[MAX_LEN]; // 航班
char name[MAX_LEN]; // 姓名
char status[MAX_LEN]; // 状态
} Luggage;
// 链表节点
typedef struct Node {
Luggage data;
struct Node *next;
} Node;
// 链表
typedef struct List {
Node *head;
int len;
} List;
// 初始化链表
void init_list(List *list) {
list->head = NULL;
list->len = 0;
}
// 创建节点
Node *create_node(Luggage data) {
Node *node = (Node *)malloc(sizeof(Node));
node->data = data;
node->next = NULL;
return node;
}
// 插入节点
void insert_node(List *list, Luggage data) {
Node *node = create_node(data);
Node *p = list->head;
Node *prev = NULL;
while (p != NULL && strcmp(p->data.id, data.id) < 0) {
prev = p;
p = p->next;
}
if (prev == NULL) {
node->next = list->head;
list->head = node;
} else {
node->next = prev->next;
prev->next = node;
}
list->len++;
}
// 查找节点
Node *find_node(List *list, char *id) {
Node *p = list->head;
while (p != NULL && strcmp(p->data.id, id) != 0) {
p = p->next;
}
return p;
}
int main() {
List list;
init_list(&list);
// 插入行李箱信息
Luggage l1 = {"510199909090002", "001", "UC8866", "张里", "到达"};
Luggage l2 = {"510200012290001", "002", "NI7755", "李丽", "已取"};
Luggage l3 = {"510198810090003", "003", "MQ9090", "王一", "未取"};
Luggage l4 = {"610197708080022", "004", "BU8080", "赵山", "未到达"};
insert_node(&list, l1);
insert_node(&list, l2);
insert_node(&list, l3);
insert_node(&list, l4);
// 交互操作
char id[MAX_LEN];
printf("欢迎使用行李箱取件系统,请输入您的身份证号:");
scanf("%s", id);
Node *p = find_node(&list, id);
if (p == NULL) {
printf("对不起,未查询到您的行李箱信息。\n");
} else {
printf("尊敬的%s先生/女士,您的行李箱状态为:%s\n", p->data.name, p->data.status);
}
return 0;
}
```
时间复杂度分析:
- 插入节点的时间复杂度为 O(n),其中 n 表示链表中已有节点数目。因为需要按照身份证号大小顺序插入节点,需要遍历链表找到插入位置。
- 查找节点的时间复杂度为 O(n),其中 n 表示链表中已有节点数目。因为需要遍历链表查找对应的节点。
空间复杂度分析:
- 空间复杂度为 O(n),其中 n 表示链表中已有节点数目。因为需要存储链表中所有节点的信息。