首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >数据结构 From Zero To Hero(四)

数据结构 From Zero To Hero(四)

作者头像
1ess
发布2021-10-29 16:38:16
发布2021-10-29 16:38:16
3410
举报
文章被收录于专栏:0x7c00的专栏0x7c00的专栏

数据结构 From Zero To Hero(四)

發佈於 2021-02-19

本篇,我们介绍一种利用线性表创建的一种数据结构 —— 栈(Stacks)。

只要我们遇到回滚或者反转之类的问题,我们就可以使用栈来解决。

Reversing a String

代码语言:javascript
复制
public string ReverseString(string input)
{
    if (input == null)
    {
        throw new ArgumentNullException();
    }

    var stack = new Stack<char>();
    foreach (var ch in input)
    {   
        stack.Push(ch);
    }

    var sb = new StringBuilder();
    while (stack.Count != 0)
    {
        sb.Append(stack.Pop());
    }

    return sb.ToString();
}

Balanced Expressions

代码语言:javascript
复制
private readonly List<char> _leftBracketList = new List<char> { '<', '(', '[', '{' };
private readonly List<char> _rightBracketList = new List<char> { '>', ')', ']', '}' };

private bool IsLeftBracket(char ch)
{
    return _leftBracketList.Contains(ch);
}

private bool IsRightBracket(char ch)
{
    return _rightBracketList.Contains(ch);
}

private bool BracketsMatch(char left, char right)
{
    return _leftBracketList.IndexOf(left) == _rightBracketList.IndexOf(right);
}

public bool BalancedExpressions(string expression)
{
    var stack = new Stack<char>();
    foreach (var ch in expression)
    {
        if (IsLeftBracket(ch))
        {
            stack.Push(ch);
        }
        else if (IsRightBracket(ch))
        {
            if (stack.Count == 0) return false;
            var top = stack.Pop();
            if (!BracketsMatch(top, ch))
            {
                return false;
            }
        }
    }

    return stack.Count == 0;
}

自己构建一个栈

代码语言:javascript
复制
public class Stack<T>
{
    private readonly T[] _stack;
    private int _size;
    public Stack(int capacity)
    {
        _stack = new T[capacity];
    }

    public void Push(T item)
    {
        if (_size == _stack.Length)
        {
            throw new StackOverflowException();
        }

        _stack[_size++] = item;
    }

    public T Pop()
    {
        if (IsEmpty())
        {
            throw new InvalidOperationException();
        }
        return _stack[--_size];
    }

    public T Peek()
    {
        if (IsEmpty())
        {
            throw new InvalidOperationException();
        }
        return _stack[_size - 1];
    }

    public bool IsEmpty()
    {
        return _size == 0;
    }

    public override string ToString()
    {
        var t = new T[_size];
        Array.Copy(_stack, t, _size);

        return $"[{string.Join(", ", t)}]";
    }
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-02-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Reversing a String
  • Balanced Expressions
  • 自己构建一个栈
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档