当前位置:首页C语言 > 正文

C语言顺序栈

作者:野牛程序员:2023-08-23 11:38:54C语言阅读 2736

顺序栈是一种基于数组实现的栈数据结构,它遵循后进先出(LIFO)的原则。栈有两个基本操作:压栈(入栈)和弹栈(出栈)。在 C 语言中,可以使用数组来实现顺序栈。以下是一个简单的顺序栈的示例:

#include <stdio.h>
#include <stdbool.h>

#define MAX_SIZE 100  // 栈的最大容量

typedef struct {
    int data[MAX_SIZE];
    int top;  // 栈顶指针
} Stack;

// 初始化栈
void initStack(Stack *stack) {
    stack->top = -1;  // 空栈的 top 初始化为 -1
}

// 判断栈是否为空
bool isEmpty(Stack *stack) {
    return stack->top == -1;
}

// 判断栈是否已满
bool isFull(Stack *stack) {
    return stack->top == MAX_SIZE - 1;
}

// 入栈操作
void push(Stack *stack, int value) {
    if (isFull(stack)) {
        printf("栈已满,无法入栈\\n");
        return;
    }
    stack->data[++(stack->top)] = value;
}

// 出栈操作
int pop(Stack *stack) {
    if (isEmpty(stack)) {
        printf("栈为空,无法出栈\\n");
        return -1;  // 返回一个特殊值表示出栈失败
    }
    return stack->data[(stack->top)--];
}

// 获取栈顶元素
int peek(Stack *stack) {
    if (isEmpty(stack)) {
        printf("栈为空\\n");
        return -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));
    
    printf("栈顶元素:%d\\n", peek(&stack));
    
    return 0;
}

在这段代码中,Stack 结构表示顺序栈,通过 top 来指示栈顶元素的位置。initStack 初始化栈,isEmptyisFull 分别检查栈是否为空或已满。push 实现入栈操作,pop 实现出栈操作,peek 获取栈顶元素而不出栈。

这只是顺序栈的一个简单示例,实际应用中可能需要更多的错误检查和优化。顺序栈适用于存储大小固定的数据,如果需要动态扩展,可以考虑使用链式栈。


野牛程序员教少儿编程与信息学奥赛-微信|电话:15892516892
野牛程序员教少儿编程与信息学竞赛-微信|电话:15892516892
相关推荐

最新推荐

热门点击