栈的C实现

栈的C实现

栈简介

栈(Stack)是一种后进先出的数据结构,类似于一个垂直的容器。

栈的特点是后进先出,即最后入栈的元素最先出栈。栈可以用来解决递归问题、实现函数调用、以及存储临时数据等。

例如,在计算机科学中,栈常用于实现函数调用栈,记录函数调用的顺序和参数。

希望本文通过使用C语言实现栈操作可以帮助读者理解栈的基本原理。

栈的C实现

1.栈结构体

想要实现栈结构,我们就要对其分配空间,可以使用结构体来实现。

结构体包含的此栈空间的起始地址、栈尺寸、栈顶元素。

如下:

C 复制代码
//栈结构体
typedef struct Stack {
    int *data;      // 栈内元素指针
    int top;        // 栈顶元素索引
    int size;       // 栈尺寸
} Stack;

2.初始化栈

有了栈结构后,我们在使用栈之前还要进行初始化。

初始化操作有分配一个栈结构体、分配指定大小的内存空间存储栈数据。

如下:

C 复制代码
// 初始化栈
Stack* initStack(int size) 
{
    Stack *stack = (Stack *)malloc(sizeof(Stack));      //  分配栈结构体并获取结构体指针
    stack->data = (int *)malloc(size * sizeof(int));    //  为栈内元素分配有size个int类型元素的空间,并将地址赋值给栈内元素指针
    stack->top = -1;                                     //  初始化栈顶元素索引为-1,表示栈空
    stack->size = size;                                  //  初始化栈尺寸为实际大小(即传入的size大小)
    return stack;                                       //  返回栈结构体指针
}

3.栈的基本操作

C 复制代码
// 入栈
void push(Stack *stack, int value)
{
    if (stack->top < stack->size - 1)       // 判断栈是否已满
    {
        stack->data[++stack->top] = value;  //将栈顶索引加1,并将数据插入栈顶
    }
    else 
    {
        printf("栈已满,无法入栈!\n");
    }
}

// 出栈
int pop(Stack *stack)
{
    if (stack->top >= 0)                     // 判断栈是否为空
    {
        return stack->data[stack->top--];   // 从栈顶获取数据,并将栈顶索引减1
    }
    else
    {
        printf("栈为空,无法出栈!\n");
        return -1; // 或者返回异常
    }
}

// 获取栈顶元素
int top(Stack *stack)
{
    if (stack->top >= 0)                     // 判断栈是否为空
    {
        return stack->data[stack->top];     // 从栈顶获取数据
    }
    else
    {
        printf("栈为空,无法获取栈顶元素!\n");
        return -1; // 或者返回异常
    }
}

// 将栈设置为空
int setEmpty(Stack *stack)
{
    return stack->top == -1;
}

// 释放栈资源
void freeStack(Stack *stack)
{
    free(stack->data);
    free(stack);
}

以上就是用C实现的栈的基本操作,

当然栈还有共享栈、链栈等,但本文介绍到的操作也是提到的这两种栈操作的基本,读者可以尝试着在此基础上实现共享栈与链栈的操作。

相关推荐
星火开发设计3 分钟前
C++ 数组:一维数组的定义、遍历与常见操作
java·开发语言·数据结构·c++·学习·数组·知识
月挽清风26 分钟前
代码随想录第七天:
数据结构·c++·算法
TTGGGFF28 分钟前
控制系统建模仿真(一):掌握控制系统设计的 MAD 流程与 MATLAB 基础运算
开发语言·matlab
小O的算法实验室28 分钟前
2026年AEI SCI1区TOP,基于改进 IRRT*-D* 算法的森林火灾救援场景下直升机轨迹规划,深度解析+性能实测
算法·论文复现·智能算法·智能算法改进
2501_9444241237 分钟前
Flutter for OpenHarmony游戏集合App实战之贪吃蛇食物生成
android·开发语言·flutter·游戏·harmonyos
小郭团队1 小时前
2_1_七段式SVPWM (经典算法)算法理论与 MATLAB 实现详解
嵌入式硬件·算法·硬件架构·arm·dsp开发
充值修改昵称1 小时前
数据结构基础:从二叉树到多叉树数据结构进阶
数据结构·python·算法
Deepoch2 小时前
Deepoc数学大模型:发动机行业的算法引擎
人工智能·算法·机器人·发动机·deepoc·发动机行业
Lhuu(重开版2 小时前
JS:正则表达式和作用域
开发语言·javascript·正则表达式
csdn_aspnet2 小时前
C 语言的优雅回归:从零手造数据结构
c语言·数据结构