1. 栈中的方法及实现思路
initStack(Stack *stack): 初始化栈函数用于将栈的顶部指针 top 设置为初始值-1,表示空栈。
isEmpty(Stack *stack): 检查栈是否为空函数通过判断栈的顶部指针 top 是否等于-1来确定栈是否为空。若 top 等于-1,则返回1表示栈为空,否则返回0表示栈非空。
isFull(Stack *stack): 检查栈是否已满函数通过判断栈的顶部指针 top 是否达到数组最大索引(MAX_SIZE-1)来确定栈是否已满。若 top 等于MAX_SIZE-1,则返回1表示栈已满,否则返回0表示栈未满。
push(Stack *stack, int item): 入栈函数用于将元素压入栈中。首先检查栈是否已满,如果已满则打印错误信息并返回。如果栈未满,将栈顶指针 top 加1,然后将元素放入 data 数组的相应位置。
pop(Stack *stack): 出栈函数用于从栈中弹出元素。首先检查栈是否为空,如果为空则打印错误信息并返回适当的错误值。如果栈非空,返回栈顶元素的值,并将栈顶指针 top 减1,表示删除了栈顶元素。
top(Stack *stack): 获取栈顶元素函数用于返回栈顶元素的值,而不修改栈结构。首先检查栈是否为空,如果为空则打印错误信息并返回适当的错误值。如果栈非空,则直接返回栈顶元素的值,不修改栈顶指针 top。
2. 代码展示
#include <stdio.h>
#define MAX_SIZE 100
typedef struct {
int data[MAX_SIZE];
int top;
} Stack;
void initStack(Stack *stack) {
stack->top = -1;
}
int isEmpty(Stack *stack) {
return (stack->top == -1);
}
int isFull(Stack *stack) {
return (stack->top == MAX_SIZE - 1);
}
void push(Stack *stack, int item) {
if (isFull(stack)) {
printf("Error: Stack overflow\n");
return;
}
stack->data[++(stack->top)] = item;
}
int pop(Stack *stack) {
if (isEmpty(stack)) {
printf("Error: Stack underflow\n");
return -1;
}
return stack->data[(stack->top)--];
}
int top(Stack *stack) {
if (isEmpty(stack)) {
printf("Error: Stack is empty\n");
return -1;
}
return stack->data[stack->top];
}
int main() {
Stack stack;
initStack(&stack);
push(&stack, 10);
push(&stack, 20);
push(&stack, 30);
printf("Top element: %d\n", top(&stack));
printf("Popped element: %d\n", pop(&stack));
printf("Popped element: %d\n", pop(&stack));
printf("Top element: %d\n", top(&stack));
getchar();
return 0;
}
