数据结构基础(第二章:堆栈)

数据结构基础

(第二章:堆栈)



一、堆栈介绍

堆栈又简称栈,是一种数据先进后出的数据结构(FILO)。便于理解,可将堆栈看作是一个放乒乓球的圆筒,将每个乒乓球看作是一个个数据,如图所示:
在这里插入图片描述
当以此放进1、2、3号乒乓球后,要想取出1号球就必须一次拿出3、2号球,每次拿出的球都是顶上的球,所以到时候我们的栈结构中也要设置一个数据记录top序号是多少。


二、堆栈的ADT(抽象数据类型)

很多同学可能对类class的运用还不太熟练,在这里我们使用struct进行定义并通过顺序结构实现!

代码如下:

typedef struct  stack
{
    int *arr;//这里我们使用静态分配;
    int top;//用于记录顶部的序号;
    int maxsize;//我们需要提前决定堆栈大小
}Stack;

三、堆栈的运算

一个数据结构必定有属于它自己的运算
这里我们重点介绍堆栈的创建、与销毁、数据的进栈,出栈和获取顶部元素

代码如下(示例):
1.堆栈的创建与销毁

void Creat(Stack *s,int max)
{
    s->maxsize=max;
    s->arr=new int[max];
    s->top=-1;
}
void Destory(Stack *s)
{
    free(s->arr);
    s->top=-1;
}

2.堆栈的数据进栈与出栈

bool Getin(Stack *s,int x)
{
    if(Isfull(s))
        return false;
    s->top+=1;
    s->arr[s->top]=x;
    return true;
}
bool Getout(Stack *s)
{
    if(Isempty(s))
        return false;
    s->top-=1;
    return true;
}

3.获取顶部元素

bool top(Stack *s,int &x)
{
    if(Isempty(s))
    {
        cout<<"栈内无数据"<<endl;
        return false;
    }
    x=s->arr[s->top];
    return true;
}

四、链接实现

上面的实现我们用的是顺序实现,也就是数组。同时我们也可以使用链接实现,我们只简单列出堆栈的定义

但是链接实现的话我们不用提前规定堆栈的最长长度,链接形式可便于数据随时扩充添加!!

typedef struct node
{
    int element;
    int *next;
}Node;

typedef struct stack
{
    Node *head;
    int sum;//记录总的数据个数
}Stack;

类似于这样(纯手画,别介意哦)!
在这里插入图片描述


总结

掌握一种数据结构的要点就是它的定义与运算,画图理解也非常重要,今天的分享就到这里咯!

  • 6
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱编程的大脸猫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值