数据结构之栈

栈的数据结构详解
本文详细介绍了栈这种数据结构,包括其定义、特性以及常见的操作方法。通过具体的代码实现了栈的基本功能,如插入、删除、获取栈顶元素等,并提供了判断栈空、栈满的方法。

栈的定义:栈(Stack)是一个后进先出(Last In First Out)的线性表,只允许在表尾进行删除和插入操作。
注:表尾称之为栈顶,表头称之为栈底。

栈的常用操作:

1、插入操作(Push):也称为进栈、压栈、入栈。类似把子弹压入弹夹的操作。
2、删除操作(Pop):也称为出栈、弹栈。类似射出子弹时子弹在弹夹中的操作。
3、取栈长度(Get Length):得到栈中的元素数量。
4、取栈大小(Get Size):得到栈的大小,即所能存储的最大元素数量。
5、清空栈(Clear):把栈的所有元素清空,但是不删除栈,也不清空其空间大小。
6、取栈顶元素(Peek):类似于Pop,返回栈顶元素,但不删除。
7、初始化(Init):给栈重新分配空间大小,把栈的所有数据清空。


以下为实现代码:

public class MyStack<T>
{
    private int top { set; get; }
    private int size { set; get; }
    private T[] data { set; get; }

    private int Top
    {
        set { this.top = value; }
        get { return this.top; }
    }
    private int Size
    {
        set { this.size = value; }
        get { return this.size; }
    }
    private T[] Data
    {
        set { this.data = value; }
        get { return this.data; }
    }

    /// <summary>
    /// 栈的默认大小为100
    /// </summary>
    public MyStack()
    {
        Top = 0;
        Size = 100;
        Data = new T[100];
    }
    /// <summary>
    /// 创建指定大小的栈
    /// </summary>
    /// <param name="size"></param>
    public MyStack(int size)
    {
        Top = 0;
        Size = size;
        Data = new T[size];
    }

    /// <summary>
    /// 检验栈是否为空
    /// </summary>
    /// <returns></returns>
    public bool IsEmpty()
    {
        return top == 0;
    }
    /// <summary>
    /// 检验栈是否存满
    /// </summary>
    /// <returns></returns>
    public bool IsFull()
    {
        return top == size;
    }
    /// <summary>
    /// 入栈
    /// </summary>
    /// <param name="value"></param>
    public void Push(T value)
    {
        if (IsFull())
            return;

        this.data[Top] = value;
        top++;
    }
    /// <summary>
    /// 出栈
    /// </summary>
    /// <returns></returns>
    public T Pop()
    {
        T temp = default(T);
        if (IsEmpty())
            return temp;

        this.Top--;
        temp = this.data[Top];

        return temp;
    }
    public T Peek()
    {
        return this.Data[Top - 1];
    }
    /// <summary>
    /// 得到指定位置的栈元素
    /// </summary>
    /// <param name="index"></param>
    /// <returns></returns>
    public T this[int index]
    {
        set { this.Data[index] = value; }
        get { return this.Data[index]; }
    }
    /// <summary>
    /// 得到当前栈的长度
    /// </summary>
    /// <returns></returns>
    public int GetLength()
    {
        return Top;
    }
    /// <summary>
    /// 得到栈的空间大小
    /// </summary>
    /// <returns></returns>
    public int GetSize()
    {
        return Size;
    }
    /// <summary>
    /// 清空栈的所有元素
    /// 栈中的所有元素作废,但是其空间不发生变化!
    /// </summary>
    public void Clear()
    {
        Data = new T[Size];
        Top = 0;
    }
    /// <summary>
    /// 销毁一个栈
    /// 释放掉该栈所占据的所有物理内存空间!
    /// </summary>
    public void Destroy()
    {
        Top = 0;
        Size = 0;
        Data = null;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值