美文网首页
数据结构|栈的实现

数据结构|栈的实现

作者: rivrui | 来源:发表于2020-05-31 22:39 被阅读0次

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

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

链表栈

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

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

数组栈(顺序栈)

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

#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;
}

相关文章

网友评论

      本文标题:数据结构|栈的实现

      本文链接:https://www.haomeiwen.com/subject/fkrdzhtx.html