数据结构 栈

简介: 利用C语言实现的数据结构栈

1.栈的概念及结构
栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端
称为栈顶,另一端称为栈底。栈中的数据元素遵守后进先出LIFO(Last In First Out)的原则。
压栈:栈的插入操作叫做进栈/压栈/入栈,入数据在栈顶。
出栈:栈的删除操作叫做出栈。出数据也在栈顶
栈的压栈和出栈大概就是以下图解
image.png
栈的实现一般可以使用数组或者链表实现,相对而言数组的结构实现更优一些。因为数组在尾上插入数据的代价比较小
2.栈的代码实现
接口的声明

#pragma once
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
#include<stdbool.h>
typedef int STDataType;
typedef struct Stack
{
    STDataType* _a;
    int _top;        // 栈顶
    int _capacity;  // 容量 
}Stack;
// 初始化栈 
void StackInit(Stack* ps);
// 入栈 
void StackPush(Stack* ps, STDataType data);
// 出栈 
void StackPop(Stack* ps);
// 获取栈顶元素 
STDataType StackTop(Stack* ps);
// 获取栈中有效元素个数 
int StackSize(Stack* ps);
// 检测栈是否为空,如果为空返回非零结果,如果不为空返回0 
bool StackEmpty(Stack* ps);
// 销毁栈 
void StackDestroy(Stack* ps);
//打印栈内容
void StackPrint(Stack* ps);

接口的实现


#define _CRT_SECURE_NO_WARNINGS 1
#include"Stack.h"
void StackInit(Stack* ps)
{ 
    assert(ps);
    ps->_a = NULL;
    ps->_capacity = 0;
    ps->_top = 0;

}
void StackPush(Stack* pst, STDataType x)
{
    assert(pst);

    if (pst->_top == pst->_capacity)
    {
        int newcapacity = pst->_capacity == 0 ? 4 : pst->_capacity * 2;
        STDataType* tmp = (STDataType*)realloc(pst->_a, sizeof(STDataType) * newcapacity);
        if (tmp == NULL)
        {
            perror("realloc fail");
            return;
        }

        pst->_a = tmp;
        pst->_capacity = newcapacity;
    }

    pst->_a[pst->_top] = x;
    pst->_top++;
}
void StackPop(Stack* ps)
{   
    assert(ps->_top > 0);
    ps->_top--;

}
STDataType StackTop(Stack* ps)
{

    return ps->_a[ps->_top-1];

}
int StackSize(Stack* ps)
{
    return ps->_top;

}
bool StackEmpty(Stack* ps)
{
    return ps->_top == 0;

}
void StackDestroy(Stack* ps)
{
    free(ps->_a);
    ps->_capacity = 0;
    ps->_top = 0;

}

结尾:今天的分享到此结束,喜欢的朋友如果感觉有帮助可以点赞三连支持,咱们共同进步!

目录
相关文章
|
6天前
|
机器学习/深度学习 算法 测试技术
【单调栈】3113. 边界元素是最大值的子数组数目
【单调栈】3113. 边界元素是最大值的子数组数目
|
1天前
|
缓存 算法 C语言
数据结构与算法⑧(第三章_上)栈的概念和实现(力扣:20. 有效的括号)
数据结构与算法⑧(第三章_上)栈的概念和实现(力扣:20. 有效的括号)
4 0
|
1天前
数据结构——栈
数据结构——栈
10 1
|
5天前
|
前端开发 JavaScript 算法
JavaScript 中实现常见数据结构:栈、队列与树
JavaScript 中实现常见数据结构:栈、队列与树
|
6天前
|
存储 NoSQL C语言
数据结构——顺序栈与链式栈的实现-2
数据结构——顺序栈与链式栈的实现
数据结构——顺序栈与链式栈的实现-2
|
6天前
|
存储 C语言
数据结构——顺序栈与链式栈的实现-1
数据结构——顺序栈与链式栈的实现
数据结构——顺序栈与链式栈的实现-1
|
6天前
栈的基本应用
栈的基本应用
14 3
|
6天前
栈与队列理解
栈与队列理解
13 1
|
6天前
|
存储 算法
数据结构与算法 栈与队列
数据结构与算法 栈与队列
13 0
数据结构与算法 栈与队列
|
6天前
|
C++
数据结构(共享栈
数据结构(共享栈
9 0