栈的基本操作的实现(c语言)

目录

栈的基本概念

创建栈

元素进栈

元素出栈

退出程序

主程序

        当我们谈到栈这个数据结构时,我们通常指的是一种具有后进先出(Last-In-First-Out,简称LIFO)特性的线性数据结构。在这篇文章中,我们将使用C语言实现栈的基本操作,包括元素进栈、元素出栈、创建栈、以及程序退出。

栈的基本概念

        在开始之前,让我们先简单了解一下栈的基本概念:

  • 栈(Stack):是一种线性数据结构,它只允许在一端进行操作,这一端通常称为栈顶。元素的插入和删除操作分别称为“进栈”和“出栈”。

创建栈

        首先,我们需要定义一个栈的结构体,以及一些必要的函数来进行栈的初始化和创建。

#include <stdio.h>
#include <stdlib.h>

// 定义栈的结构体
typedef struct {
    int* array;    // 用于存储栈元素的数组
    int capacity;  // 栈的容量
    int top;       // 栈顶指针
} Stack;

// 初始化栈
Stack* createStack(int capacity) {
    Stack* stack = (Stack*)malloc(sizeof(Stack));
    stack->capacity = capacity;
    stack->array = (int*)malloc(stack->capacity * sizeof(int));
    stack->top = -1;  // 初始化栈顶指针为-1,表示空栈
    return stack;
}

        在上述代码中,我们使用了一个结构体 Stack 来表示栈,其中包含了一个整型数组 array 用于存储栈中的元素,一个整型变量 capacity 表示栈的容量,以及一个整型变量 top 用于指示栈顶的位置。

元素进栈

        接下来,我们实现将元素推入栈的操作,即进栈。

// 元素进栈
void push(Stack* stack, int item) {
    if (stack->top == stack->capacity - 1) {
        // 栈满,无法继续进栈
        printf("栈已满,无法进栈。\n");
        return;
    }

    // 栈顶指针上移一位,然后将元素放入栈中
    stack->array[++stack->top] = item;
    printf("%d 进栈成功。\n", item);
}

        在这个函数中,我们首先检查栈是否已满,如果是则输出一条提示信息。否则,我们通过递增栈顶指针的方式将元素放入栈中,并输出进栈成功的提示信息。

元素出栈

        下面,我们来实现从栈中取出元素的操作,即出栈。

// 元素出栈
int pop(Stack* stack) {
    if (stack->top == -1) {
        // 栈空,无法出栈
        printf("栈为空,无法出栈。\n");
        return -1;  // 返回一个特殊值表示出栈失败
    }

    // 返回栈顶元素并将栈顶指针下移一位
    return stack->array[stack->top--];
}

        在这个函数中,我们首先检查栈是否为空,如果是则输出一条提示信息。否则,我们返回栈顶元素并将栈顶指针下移一位,表示元素已经出栈。

退出程序

        最后,我们需要添加一个函数来释放栈的内存,并在程序退出时调用该函数。

// 释放栈的内存
void destroyStack(Stack* stack) {
    free(stack->array);
    free(stack);
}

主程序

        现在,我们可以编写一个简单的主程序来测试我们实现的栈操作。

int main() {
    // 创建一个容量为 5 的栈
    Stack* stack = createStack(5);

    // 进栈操作
    push(stack, 10);
    push(stack, 20);
    push(stack, 30);

    // 出栈操作
    printf("%d 出栈成功。\n", pop(stack));
    printf("%d 出栈成功。\n", pop(stack));

    // 进栈操作
    push(stack, 40);

    // 释放栈的内存
    destroyStack(stack);

    return 0;
}

到此,栈的基本操作的实现程序实现完成。

  • 16
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值