C#数据结构-栈

发布时间:2021-01-01 发布网站:编程之家
编程之家收集整理的这篇文章主要介绍了C#数据结构-栈编程之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

栈的定义不需要多说,相信大家都非常熟悉,但是,在实际应用中栈的应用我们很少想到会去用栈结构,先上代码看下用法:

 Stack st = new Stack();
  st.Push('A');
  st.Push(BCD);
  foreach (char c in st)
  {
      Console.Write(c + " ");
  }
  Console.WriteLine();
  st.Push(E);
  }
  Console.WriteLine();
  st.Pop();
  st.Pop();
  st.Pop();
  );
  }
  Console.ReadLine();

 

 

 现在我们自己实现一个栈结构:

 

  /// <summary>
    ////// </summary>
    public class MyStack
    {
        <summary>
         栈的实现还是使用数组的方式存储
        </summary>
        public Object[] content { get; set; }
         栈深度
        int size {  默认开始深度
        int defaultSize { set; } = 10;
         初始化 默认深度
        public MyStack()
        {
            content = new object[defaultSize];
            size = 0;
        }
         压栈
        </summary>
        <param name="obj"></param>
        virtual void Push(Object obj)
        {
            //如果数组满了,则扩容(翻倍扩容)
            if (size == content.Length)
            {
                扩容次数为2的指数级
                Object[] newArray = new Object[2 * content.Length];
                将原内容拷贝到新的数组中 (扩容次数 2的指数级扩容,减少拷贝带来的时间消耗)
                Array.Copy(content,0,newArray,1)">,size);
                content = newArray;
            }
            写入数组
            content[size++] = obj;
        }
         取下一个出栈值,但不删除 (偷看下~)
        <returns></returns>
        virtual Object Peek()
        {
            if (size == )
                throw new InvalidOperationException("空栈);
            return content[size - 1];
        }
         出栈
         Object Pop()
        {
            );
            Object obj = content[--size];
            content[size] = null;
            return obj;
        }
        实现该方法是为了 暂不实现 ICollection -
         ShowAll()
        {

            for (int i=size-1;i>=0;i--)
            {
                Console.Write($ {content[i]});
            }
            Console.WriteLine();
        }
    }
     异步栈
     MySyncStack : MyStack
    {
        private MyStack myStack;

         Object lookObj;

        override  Push(Object value)
        {
            lock (lookObj)
            {
                myStack.Push(value);
            }
        }

        override (lookObj)
            {
                 myStack.Pop();
            }
        }

         myStack.Peek();
            }
        }
    }

可以看出,其实栈还是用数组结构来实现的,异步栈在栈的基础上增加了锁。

 

测试下:

MyStack st =  MyStack();
st.Push();
st.Push();
st.ShowAll();
st.Push();
st.ShowAll();
st.Pop();
st.Pop();
st.Pop();
st.ShowAll();
Console.ReadLine();

 

 


 

 

 

总结

以上是编程之家为你收集整理的C#数据结构-栈全部内容,希望文章能够帮你解决C#数据结构-栈所遇到的程序开发问题。

如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您喜欢交流学习经验,点击链接加入编程之家官方QQ群:1065694478