C语言中关于堆栈的基础操作
作者:野牛程序员:2024-11-18 14:22:40C语言阅读 2010
C语言中关于堆栈的基础操作
C语言中关于堆栈的基础操作
在 C 语言中,堆栈是一种 后进先出(LIFO,Last In First Out) 的数据结构。堆栈的基础操作包括初始化、入栈(Push)、出栈(Pop)、查看栈顶元素(Peek/Top)、检查是否为空(IsEmpty) 等。以下是 C 语言实现堆栈的基础操作:
代码实现
1. 定义堆栈结构
#include <stdio.h>
#include <stdlib.h>
#define MAX_SIZE 100 // 栈的最大容量
typedef struct Stack {
int data[MAX_SIZE]; // 存储栈元素
int top; // 栈顶指针
} Stack;
2. 初始化堆栈
void initStack(Stack* stack) { stack->top = -1; // 初始化栈顶指针为 -1,表示栈为空 }
3. 检查栈是否为空
int isEmpty(Stack* stack) { return stack->top == -1; // 栈顶指针为 -1 时,栈为空 }
4. 检查栈是否已满
int isFull(Stack* stack) { return stack->top == MAX_SIZE - 1; // 栈顶指针达到最大容量时,栈已满 }
5. 入栈操作(Push)
void push(Stack* stack, int value) { if (isFull(stack)) { printf("栈已满,无法插入元素 %d\n", value); return; } stack->data[++stack->top] = value; // 栈顶指针先加1,再插入元素 }
6. 出栈操作(Pop)
int pop(Stack* stack) { if (isEmpty(stack)) { printf("栈为空,无法进行出栈操作\n"); return -1; // 返回 -1 表示出栈失败 } return stack->data[stack->top--]; // 返回栈顶元素,并将栈顶指针减1 }
7. 查看栈顶元素(Peek/Top)
int peek(Stack* stack) { if (isEmpty(stack)) { printf("栈为空,无法查看栈顶元素\n"); return -1; // 返回 -1 表示栈顶元素不存在 } return stack->data[stack->top]; // 返回栈顶元素 }
完整示例:测试堆栈操作
int main() { Stack stack; // 定义一个栈 initStack(&stack); // 初始化栈 // 入栈操作 push(&stack, 10); push(&stack, 20); push(&stack, 30); printf("栈顶元素: %d\n", peek(&stack)); // 查看栈顶元素 // 出栈操作 printf("出栈元素: %d\n", pop(&stack)); printf("出栈元素: %d\n", pop(&stack)); // 检查栈是否为空 if (isEmpty(&stack)) { printf("栈已空\n"); } else { printf("栈未空,栈顶元素: %d\n", peek(&stack)); } return 0; }
Stack
结构体:包含数组
data
存储栈元素,top
表示栈顶指针。初始化操作:
将栈顶指针初始化为 -1 表示栈为空。
入栈和出栈:
入栈操作检查栈是否已满,出栈操作检查栈是否为空。
动态数组栈:
如果需要支持动态大小的栈,可用
malloc
动态分配内存替代固定大小的数组。
野牛程序员教少儿编程与信息学奥赛-微信|电话:15892516892