用c语言建立一个顺序栈,用户输入车的号码和进入时间,存入这两个数据
时间: 2024-10-17 17:04:33 浏览: 31
在C语言中,我们可以创建一个简单的顺序栈(也称为数组栈)来存储车辆的信息,包括车牌号码和进入时间。这里我们假设栈的最大容量是固定的,例如50辆车。以下是实现的基本步骤:
```c
#include <stdio.h>
#define MAX_CAPACITY 50
typedef struct {
char license_number[MAX_LICENSE_LEN + 1]; // 车牌号码
time_t entry_time; // 进入时间(可以使用time_t结构)
} Vehicle;
typedef struct {
int top;
Vehicle stack[MAX_CAPACITY];
} Stack;
// 初始化栈
void init(Stack *s) {
s->top = -1;
}
// 判断栈是否已满
int is_full(Stack *s) {
return (s- 1);
}
// 判断栈是否为空
int is_empty(Stack *s) {
return (s->top == -1);
}
// 入栈操作
void push(Stack *s, Vehicle v) {
if (is_full(s)) {
printf("Stack is full, cannot push.\n");
return;
}
s->top++;
s->stack[s->top] = v;
}
// 出栈操作
Vehicle pop(Stack *s) {
if (is_empty(s)) {
printf("Stack is empty, cannot pop.\n");
return s->stack[0]; // 如果需要返回默认值,这里给出
}
Vehicle ret = s->stack[s->top];
s->top--;
return ret;
}
// 主函数示例
int main() {
Stack vehicle_stack;
init(&vehicle_stack);
while (1) {
printf("Enter car number and its entry time (format: 'number timestamp', or 'quit' to exit):\n");
char input[100];
fgets(input, sizeof(input), stdin);
if (strcmp(input, "quit") == 0) break; // 用户选择退出
char* token = strtok(input, " ");
if (token && strlen(token) > 0) {
Vehicle v;
strcpy(v.license_number, token); // 假设最大长度足够
token = strtok(NULL, " ");
if (token && strlen(token) > 0) {
time_t t = strtol(token, NULL, 10); // 将时间字符串转换为time_t类型
v.entry_time = t;
push(&vehicle_stack, v);
} else {
printf("Invalid format. Please try again.\n");
}
} else {
printf("Invalid input. Please try again.\n");
}
}
return 0;
}
```
在这个程序中,我们首先定义了一个`Vehicle`结构体来存放车辆信息,然后创建了一个`Stack`结构体,包含一个整型变量`top`和一个`Vehicle`类型的动态数组`stack`。`push`、`pop`和`init`等函数分别实现了入栈、出栈和初始化栈的操作。
在主函数中,用户持续输入车辆信息直到输入"quit"为止。注意,此代码未处理可能出现的时间格式错误和异常情况,实际应用中可能需要完善这些部分。
阅读全文