栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

栈的讲解与实现(C语言)数据结构

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

栈的讲解与实现(C语言)数据结构

栈的概念与结构:

栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除操作。进行数据插入的一端称为栈顶,另一端称为栈底。栈中的数据元素遵守后进先出原则。

压栈:栈的插入操作叫做压栈,压入的数据在栈顶。

出栈:栈的删除操作叫出栈。出的数据也在栈顶。

 栈的实现:

栈的实现一般使用数组和链表实现,相对而言数组的结构更优一些。因为数组在尾上插入的数据代价比较小。

以下为栈的代码实现:

#pragma once
#include
#include
#include

typedef int STDateType
typedef struct Stack
{
    STDateType *a;
    int top;
    int capacity;
}ST;

//初始化栈
void StackInit(ST* ps);
//销毁栈
void StackDestory(ST* ps);
//入栈
void StackPush(ST *ps, STDateType x);
//出栈
void StackPop(ST* ps);
//获取栈顶元素
STDateType StackTop(ST* ps);
//获取栈顶有效元素个数
int StackSize(ST* ps);
//检查栈是否为空,如果为空返回非零结果,如果不为空返回0
bool StackEmpty(ST* ps);

初始化栈:

void StackInit(ST* ps)
{
    assert(ps);
    ps->a=NULL;
    ps->top=0;
    ps->capacity=0;
}

销毁栈:

void StackDestory(ST* ps)
{
    assert(ps);
    free(ps->a);
    ps->capacity=0;
    ps->top=0;
}

入栈:

void StackPush(ST*ps,STDateType x)
{
    if(ps->top==ps->capacity)
    {
        int newCapacity=ps->capacity==0?4:(2*ps->capacity);
        STDateType* tmp=(STDateType*)realloc(sizeof(newCapacity*STDateType));
        if(tmp==NULL)
        {
            printf("realloc is failn");
            exit(-1);
        }
        ps->a=tmp;
        ps->capacity=newCapacity;
    }    
    ps->a[ps->top]=x;
    ps->top++;
}

出栈:

void StackPop(ST* ps)
{
    assert(ps);
    assert(!StackEmpty(ps)); //防止出栈溢出
    ps->top--;
}

获取栈顶元素:

STDateType StackTop(ST* ps)
{
    assert(ps);
    assert(!StackEmpty(ps));//如果栈为空就不再获取栈顶
    return ps->a[ps->top-1];
}

获取栈顶有效元素个数:

int StackSize(ST* ps)
{
    assert(ps);
    return ps->top;
}

检查栈顶是否为空:

bool StackEmpty(ST* ps)
{
    assert(ps);
    return ps->top == 0;
}

以上就是对栈的实现与讲解。

感谢老铁看到这里,如果文章对你有用的话请给我一个赞支持一下,感激不尽!

在下才疏学浅,一点浅薄之见,欢迎各位大佬指点。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/396317.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号