堆栈的顺序存储结构如何创建(C语言,带详细注释)
时间: 2024-01-31 22:02:02 浏览: 31
以下是一个使用数组实现堆栈的顺序存储结构的示例代码,使用C语言编写,并带有详细注释:
```c
#include <stdio.h>
#define MAX_SIZE 100
// 定义堆栈结构
typedef struct {
int data[MAX_SIZE]; // 用于存储堆栈元素的数组
int top; // 栈顶指针,指向最后一个元素的位置
} Stack;
// 初始化堆栈
void initStack(Stack *stack) {
stack->top = -1; // 初始时将栈顶指针设置为-1,表示堆栈为空
}
// 判断堆栈是否为空
int isEmpty(Stack *stack) {
return (stack->top == -1); // 栈顶指针为-1时表示堆栈为空
}
// 判断堆栈是否已满
int isFull(Stack *stack) {
return (stack->top == MAX_SIZE - 1); // 栈顶指针等于数组最大索引时表示堆栈已满
}
// 入栈操作
void push(Stack *stack, int item) {
if (isFull(stack)) {
printf("Stack Overflow!\n");
return;
}
stack->top++; // 栈顶指针加1
stack->data[stack->top] = item; // 将元素存入栈顶指针所指向的位置
}
// 出栈操作
int pop(Stack *stack) {
if (isEmpty(stack)) {
printf("Stack Underflow!\n");
return -1; // 表示栈为空,返回一个特殊值
}
int item = stack->data[stack->top]; // 取出栈顶元素
stack->top--; // 栈顶指针减1
return item; // 返回出栈的元素值
}
// 获取栈顶元素
int peek(Stack *stack) {
if (isEmpty(stack)) {
printf("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", peek(&stack)); // 输出栈顶元素
printf("Pop element: %d\n", pop(&stack)); // 出栈操作
printf("Pop element: %d\n", pop(&stack));
printf("Pop element: %d\n", pop(&stack));
if (isEmpty(&stack)) {
printf("Stack is empty!\n");
} else {
printf("Stack is not empty!\n");
}
return 0;
}
```
此示例展示了如何使用数组实现堆栈的顺序存储结构。在主函数中,我们首先使用`initStack`函数初始化堆栈。然后使用`push`函数将元素依次压入堆栈,并使用`peek`函数获取栈顶元素。接下来,我们使用`pop`函数将元素从堆栈中弹出,并输出弹出的元素值。最后,我们使用`isEmpty`函数检查堆栈是否为空,并输出相应的信息。
请注意,此示例中的堆栈实现是基于数组的,因此在定义堆栈时需要提前指定最大容量。在入栈操作时,我们需要检查堆栈是否已满;在出栈操作时,我们需要检查堆栈是否为空。