云计算、AI、云原生、大数据等一站式技术学习平台

网站首页 > 教程文章 正文

C语言实现栈(Stack)(c语言实现栈的四则运算)

jxf315 2025-04-07 15:13:55 教程文章 16 ℃

栈(Stack)是一种后进先出(LIFO, Last In First Out)的数据结构。它支持两种主要操作:

  • 入栈(Push):将元素添加到栈的顶部。
  • 出栈(Pop):从栈的顶部移除元素。

以下是使用C语言实现一个简单的栈的代码:


栈的实现

#include 
#include 

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

// 定义栈结构
typedef struct {
    int items[MAX_SIZE]; // 存储栈元素的数组
    int top;             // 栈顶指针
} Stack;

// 初始化栈
void initStack(Stack *s) {
    s->top = -1; // 栈顶指针初始化为-1,表示栈为空
}

// 检查栈是否为空
int isEmpty(Stack *s) {
    return s->top == -1;
}

// 检查栈是否已满
int isFull(Stack *s) {
    return s->top == MAX_SIZE - 1;
}

// 入栈操作
void push(Stack *s, int value) {
    if (isFull(s)) {
        printf("栈已满,无法入栈!\n");
        return;
    }
    s->top++; // 栈顶指针上移
    s->items[s->top] = value; // 将元素添加到栈顶
    printf("入栈元素:%d\n", value);
}

// 出栈操作
int pop(Stack *s) {
    if (isEmpty(s)) {
        printf("栈为空,无法出栈!\n");
        return -1; // 返回-1表示栈为空
    }
    int value = s->items[s->top]; // 获取栈顶元素
    s->top--; // 栈顶指针下移
    printf("出栈元素:%d\n", value);
    return value;
}

// 获取栈顶元素(不删除)
int peek(Stack *s) {
    if (isEmpty(s)) {
        printf("栈为空,无栈顶元素!\n");
        return -1; // 返回-1表示栈为空
    }
    return s->items[s->top];
}

// 打印栈内容
void printStack(Stack *s) {
    if (isEmpty(s)) {
        printf("栈为空!\n");
        return;
    }
    printf("栈内容(从栈顶到栈底):");
    for (int i = s->top; i >= 0; i--) {
        printf("%d ", s->items[i]);
    }
    printf("\n");
}

int main() {
    Stack s;
    initStack(&s); // 初始化栈

    push(&s, 10); // 入栈10
    push(&s, 20); // 入栈20
    push(&s, 30); // 入栈30

    printStack(&s); // 打印栈内容

    pop(&s); // 出栈
    printStack(&s); // 打印栈内容

    printf("栈顶元素:%d\n", peek(&s)); // 获取栈顶元素

    pop(&s); // 出栈
    pop(&s); // 出栈
    pop(&s); // 尝试从空栈出栈

    return 0;
}

代码说明

  1. 栈结构

使用数组 items 存储栈元素。

top 表示栈顶的索引。

  1. 初始化栈

将 top 初始化为 -1,表示栈为空。

  1. 入栈操作

检查栈是否已满。

将元素添加到栈顶,并更新 top。

  1. 出栈操作

检查栈是否为空。

获取栈顶元素,并更新 top。

  1. 获取栈顶元素

返回栈顶元素的值,但不删除它。

  1. 打印栈内容

从栈顶到栈底遍历并打印所有元素。

  1. 主函数

初始化栈。

进行入栈和出栈操作,并打印栈内容。


示例输出

入栈元素:10
入栈元素:20
入栈元素:30
栈内容(从栈顶到栈底):30 20 10 
出栈元素:30
栈内容(从栈顶到栈底):20 10 
栈顶元素:20
出栈元素:20
出栈元素:10
栈为空,无法出栈!

总结

  • 该实现使用数组存储栈元素,适合固定大小的栈。
  • 如果需要动态扩展栈大小,可以使用链表实现。
  • 栈的入栈和出栈操作的时间复杂度均为 O(1)。
最近发表
标签列表