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

顺序栈的实现以及初应用

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

顺序栈的实现以及初应用

首先,我们要搞明白什么是栈?

栈是一种受限线性表,也就是说,栈元素具有线性关系,即前驱后继关系;
只不过它是 一种特殊的线性表而已

那么顺序栈呢?

栈的顺序存储结构简称顺序栈,利用一组地址连续的存储单元依次存放自栈底到栈顶的数据元素,
同时附设指针top指示栈顶元素在顺序表中的位置。

下面是栈的的实现:

首先先引用一些头文件,后面会用到:

#include
#include
#include 
#include 

这里我们采用用数组对栈的实现(数组相对于链表缓存更加快速!)

typedef char StDateType;
typedef struct Stack
{
    StDateType* arr;  //栈的主体
    int top;    //栈顶
    int capacity;//栈的容量
}Stack;

现在栈有了,那么怎么实现初始化和栈销毁呢?

//栈的初始化
void StackInit(Stack* B)
{
    assert(B);
    B->arr = NULL;
    B->top = 0;
    B->capacity = 0;
}
//栈的销毁
void StackDestory(Stack* B)
{
    assert(B);
    free(B->arr);
    B->arr = NULL;
    B->top = B->capacity = 0;
}

好,有了最简单的初始化和销毁,我们接下来的任务就是往栈里放数据了。

void StackPush(Stack* B, StDateType c)
{
    assert(B);
    if (B->top == B->capacity)            //判断是否要增容
    {
        int newcapacity = B->capacity == 0 ? 4 : B->capacity * 2;
        B->arr = (StDateType*)realloc(B->arr, newcapacity * sizeof(StDateType));
        if (B->arr == NULL)
        {
            exit(-1);
        }
        B->capacity = newcapacity;
    }
    B->arr[B->top] = c;                //存放数据
    B->top++;                         //栈顶位置更新
}

如果我想销毁栈顶数据呢?

很简单,只需要把栈顶的位置往前推一位

void StackPop(Stack* B)
{
    assert(B);
    assert(B->top>0);   //判断栈是否为空,为空肯定不能不能再删除了!
    --B->top;
}

其实这里也可以写一个判断是否为空的函数:

bool StackEmpty(Stack* B)
{
    return B->top == 0;
}

栈顶位置的数据拿取:

StDateType StackTop(Stack* B)
{
    assert(B);
    assert(B->top > 0);
    return B->arr[B->top - 1];
}

到此,栈的简单实现和应用就完成啦!

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

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

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