'''c
#include
#include
#define MAX_SIZE 100
struct Stack {
int data[MAX_SIZE];
int top;
};
void initializeStack(struct Stack* stack) {
stack->top = -1;
}
int isStackEmpty(struct Stack* stack) {
return stack->top == -1;
}
int isStackFull(struct Stack* stack) {
return stack->top == MAX_SIZE - 1;
}
void push(struct Stack* stack, int value) {
if (isStackFull(stack)) {
printf("Stack Overflow\n");
return;
}
stack->top++;
stack->data[stack->top] = value;
}
int pop(struct Stack* stack) {
if (isStackEmpty(stack)) {
printf("Stack Underflow\n");
return -1;
}
int value = stack->data[stack->top];
stack->top--;
return value;
}
int peek(struct Stack* stack) {
if (isStackEmpty(stack)) {
printf("Stack is Empty\n");
return -1;
}
return stack->data[stack->top];
}
void displayStack(struct Stack* stack) {
if (isStackEmpty(stack)) {
printf("Stack is Empty\n");
return;
}
printf("Stack: ");
for (int i = stack->top; i >= 0; i--) {
printf("%d ", stack->data[i]);
}
printf("\n");
}
int main() {
struct Stack stack;
initializeStack(&stack);
push(&stack, 10);
push(&stack, 20);
push(&stack, 30);
push(&stack, 40);
displayStack(&stack);
printf("Top element: %d\n", peek(&stack));
int poppedElement = pop(&stack);
printf("Popped element: %d\n", poppedElement);
displayStack(&stack);
return 0;
}
'''
在此实现中,我们定义了一个“堆栈”结构,该结构包含一个数组“data”来存储堆栈的元素,以及一个整数“top”来跟踪顶部元素的位置。“MAX_SIZE”常量表示堆栈的最大容量。
“initializeStack”函数通过将“top”设置为 -1 来初始化堆栈,表示空堆栈。“isStackEmpty”和“isStackFull”函数分别检查堆栈是空的还是满的。
“push”函数通过递增“top”并将值分配给“data”数组中的相应位置,将元素插入堆栈中。如果堆栈已满,它会打印一条消息,指示堆栈溢出。
'pop' 函数删除并返回堆栈的顶部元素。它递减“top”并返回“data”数组中相应位置的值。如果堆栈为空,则打印一条消息,指示堆栈下溢。
“peek”函数返回顶部元素的值,而不将其删除。它检查堆栈是否为空,并在这种情况下返回 -1。
'displayStack' 函数从上到下打印堆栈的元素。如果堆栈为空,则打印一条消息,指示堆栈为空。
在“main”函数中,我们初始化一个堆栈并执行一些堆栈操作来演示功能。我们使用“push”函数插入元素,“peek”函数检索顶部元素,“pop”函数删除元素,使用“displayStack”函数打印堆栈的内容。
注意:此实现使用固定大小的数组来表示堆栈。如果堆栈超过“MAX_SIZE”定义的最大容量,则会导致堆栈溢出。