前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >数据结构|栈的实现改[5]

数据结构|栈的实现改[5]

作者头像
福贵
发布2020-06-04 16:24:01
3100
发布2020-06-04 16:24:01
举报
文章被收录于专栏:菜鸟致敬菜鸟致敬

栈满足的特性是先进后出,就像货车装货物,把货物一次放进去,但是卸货的时候,你得先把最外面的卸载了,才能继续卸载里层的货物。 栈的实现有两种形式,一种是数组,一种是链表。

对于一个栈,需要至少三个属性

  • top:记录当前栈的顶部,超过栈的长度和长度小于0都应报错。
  • push:往栈里面存东西,当超过栈的长度需要警报,当然,链表栈理论上是可以无限存东西的。
  • pop:把栈顶部的数据移除。

链表栈

链表栈实际上可以看成链表的一种约束,约束了链表的长度,链表的插入和删除位置。 对于链表栈,需要两个变量

  • top:记录当前栈顶的地址和位置。
  • 链表:记录当前的数据和下一个,上一个的链表块的地址。top永远指向了链表栈的最后一个元素,记录其位置。链表栈和链表结构本质相同。

数组栈(顺序栈)

对数组进行约束,成为栈。 数组栈的长度一定,使用top记录当前的位置,比如说,array长度为10,但是我们指存储了5个数据,那么top的值就是4。往栈里面加入一个数据,top变成5,当已经10个数据时,top为9。之后继续加入数据,报错,加入失败。 删除数据时,top减少,当top为0时,继续删除,报错,删除失败。 关于实现一个顺序栈

代码语言:javascript
复制
#include <stdio.h>
#include <iostream>
#include <stdlib.h>
using namespace std;
class Stack
{
public:
    int top;
    int length;
    int content[10];
    int push(int num);
    int pop();
    int peek();
    Stack();
};
int Stack::peek()
{
    return content[top];
};
int Stack::push(int num){{top += 1;
if (top >= 10)
{
    top -= 1;
    return -1;
}
content[top] = num;
length = top + 1;
return content[top];
}
}
;
int Stack::pop()
{
    {
        top -= 1;
        if (top < 0)
        {
            top += 1;
            return -1;
        }
        content[top + 1] = -1;
        length = top + 1;
        return content[top];
    };
};
Stack::Stack()
{
    top = -1;
    length = 0;
};
int main()
{
    Stack stack;
    for(int i=0;i<7;i++){
        stack.push(i*i);
    }
    for (int i = 0; i < stack.length; i++)
    {
        printf("%d,", stack.content[i]);
    };
    printf("\n");
    stack.pop();
    stack.pop();
    for (int i = 0; i < stack.length; i++)
    {
        printf("%d,", stack.content[i]);
    };
    return 0;
}
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-06-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python与MySQL 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 链表栈
  • 数组栈(顺序栈)
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档