数据结构的学习----栈的实现

一.栈的基本介绍

栈:特殊的线性表,仅仅可以在固定一端进行插入和删除元素

进行数据插入和删除操作的一端称为栈顶,另一端为栈底

压栈:入数据在栈顶

出栈:出数据在栈顶

二.栈的实现

using namespace std;
#include<iostream>
​
//用C++实现栈的相关功能
​
typedef int STDateType;
​
class Stack
{
public:
    //栈的初始化
    Stack()
    {
        _a = NULL;
        _top = 0;
        _capacity = 0;
    }
    //入栈
    void Push(STDateType x)
    {
        if (_top == _capacity)
        {
            int newcapacity = _capacity == 0 ? 4 : _capacity * 2;
            STDateType* tmp = (STDateType*)realloc(_a,sizeof(STDateType)*newcapacity);
            if (tmp == NULL)
            {
                perror("realloc failed");
                return;
            }
​
            _a = tmp;
            _capacity = newcapacity;
        }
​
        _a[_top] = x;
        _top++;
    }
    //打印栈的内容
    void Print()
    {
        while (_top--)
        {
            printf("%d<-", _a[_top]);
        }
    }
    //出栈
    void Pop()
    {
        if (IsEmpty())
            _top--;
​
        return;
    }
    //获取栈顶元素
    int Top()
    {
        int tmp = _top;
        if (IsEmpty())
            return _a[--tmp];
​
        return 0;
    }
    //判断栈是否为空,为空返回0
    int IsEmpty()
    {
        if (_top == 0)
            return 0;
        else
            return 1;
    }
    //获取栈的元素个数
    int Size()
    {
        return _top;
    }
​
    //栈的析构
    ~Stack()
    {
        free(_a);
        _a = NULL;
        _top = 0; //标记栈顶的位置
        _capacity = 0;
    }
​
private:
    STDateType* _a;
    int _top;
    int _capacity;
};
​
​
void Test1()
{
    Stack s1;
    s1.Push(1);
    s1.Push(2);
    s1.Push(3);
    s1.Push(4);
    s1.Push(5);
    
    s1.Print();
​
}
​
void Test2()
{
    Stack s1;
    s1.Push(1);
    s1.Push(2);
    s1.Push(3);
    s1.Push(4);
    s1.Push(5);
    s1.Pop();
    s1.Pop();
    s1.Pop();
    s1.Pop();
    s1.Pop();
    s1.Pop();
    s1.Pop();
    s1.Pop();
    s1.Pop();
​
    s1.Print();
​
}
​
void Test3()
{
    Stack s1;
    s1.Push(1);
    s1.Push(2);
    s1.Push(3);
    s1.Push(4);
    s1.Push(5);
    printf("%d\n", s1.Top());
​
​
    s1.Print();
​
}
void Test4()
{
    Stack s1;
    s1.Push(1);
    s1.Push(2);
    s1.Push(3);
    s1.Push(4);
    s1.Push(5);
    printf("%d\n", s1.Size());
​
​
    s1.Print();
​
}
​
int main()
{
    
    //Test1();
    //Test2();
    //Test3();
    //Test4();
​
    return 0;
}

三.总结

这回的栈是用C++实现的,C++相对于C语言的实现,有更多好处。

直观上看,代码量是明显减少的,不需要传递指针,只需要在类中之间调用其中的方法,this指针指向创建的对象,被默认传递。构造函数与析构函数减少了遗忘初始化与销毁的函数。变量的调用也更是方便好用。

之后也会更新C++相关文章以及剩下的数据结构。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值