pta7-5 特殊堆栈c语言
时间: 2024-03-10 17:46:58 浏览: 169
好的,我理解了你的问题。那么,pta7-5 特殊堆栈的 C 语言实现如下:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_SIZE 100
// 定义特殊堆栈结构体
struct SpecialStack {
int data[MAX_SIZE]; // 堆栈数据
int min[MAX_SIZE]; // 堆栈中的最小值
int top; // 堆栈顶部指针
};
// 初始化特殊堆栈
void initStack(struct SpecialStack *stack) {
stack->top = -1;
}
// 判断特殊堆栈是否为空
int isEmpty(struct SpecialStack *stack) {
return stack->top == -1;
}
// 判断特殊堆栈是否已满
int isFull(struct SpecialStack *stack) {
return stack->top == MAX_SIZE - 1;
}
// 向特殊堆栈中添加元素
void push(struct SpecialStack *stack, int item) {
if (isFull(stack)) {
printf("特殊堆栈已满,无法添加元素!\n");
return;
}
// 添加元素到堆栈中
stack->data[++stack->top] = item;
// 更新最小值
if (stack->top == 0) {
stack->min[stack->top] = item;
} else {
int min = stack->min[stack->top - 1];
stack->min[stack->top] = item < min ? item : min;
}
}
// 从特殊堆栈中弹出元素
int pop(struct SpecialStack *stack) {
if (isEmpty(stack)) {
printf("特殊堆栈为空,无法弹出元素!\n");
return -1;
}
// 取出堆栈顶部元素
int item = stack->data[stack->top--];
// 更新最小值
stack->min[stack->top + 1] = 0;
return item;
}
// 获取特殊堆栈中的最小值
int getMin(struct SpecialStack *stack) {
if (isEmpty(stack)) {
printf("特殊堆栈为空,无法获取最小值!\n");
return -1;
}
return stack->min[stack->top];
}
// 测试函数
int main() {
// 创建特殊堆栈
struct SpecialStack stack;
initStack(&stack);
// 向特殊堆栈中添加元素
push(&stack, 3);
push(&stack, 5);
push(&stack, 2);
push(&stack, 1);
// 获取特殊堆栈中的最小值
printf("特殊堆栈中的最小值为:%d\n", getMin(&stack));
// 弹出特殊堆栈中的元素
printf("特殊堆栈中的元素依次为:");
while (!isEmpty(&stack)) {
printf("%d ", pop(&stack));
}
printf("\n");
return 0;
}
```
以上是特殊堆栈的 C 语言实现代码,你可以根据需要进行修改、调试和运行。
阅读全文